前置き
仕事である特定の文言をあるカラムに追加してほしいと言われ、
大量にデータがあったため、UPDATE文でアップデートすることに。
そのカラムには既に文言が入っている場合もあり、文言が入っていた場合は活かしてほしいとのことだったので、
CONCATを使って文字を結合することで対応をしました。
CONCATの使い方
UPDATE テーブル名 SET カラム名 = CONCAT('追加する文言' , カラム名) WHERE id = 1;
※CONCAT()内のカラム名は既に入っている文言を引っ張ることができます。
このSQLでテーブルは下記のように更新されます。
|id|カラム名|
|:|:|
|1|'追加する文言''元々入っている文言'|
分かりやすく説明すると、
例えば、ある人がランチで食べたメニューのデータベースがあるとします。
|日付|メニュー|
|:|:|
|11/15|ラーメン|
|11/18|ラーメン|
|11/19|ラーメン|
|11/24|ラーメン|
やっぱり何のラーメンか付けておけばよかった~という時、
下記のようにCONCATを使えば、何のラーメンだったか追加することが出来ます。
UPDATE ランチメニュー SET メニュー = CONCAT('醤油' , メニュー) WHERE 日付 = '11/15';
UPDATE ランチメニュー SET メニュー = CONCAT('二郎系' , メニュー) WHERE 日付 = '11/18';
UPDATE ランチメニュー SET メニュー = CONCAT('塩' , メニュー) WHERE 日付 = '11/19';
UPDATE ランチメニュー SET メニュー = CONCAT('家系' , メニュー) WHERE 日付 = '11/24';
|日付|メニュー|
|:|:|
|11/15|醤油ラーメン|
|11/18|二郎系ラーメン|
|11/19|塩ラーメン|
|11/24|家系ラーメン|
二郎系の翌日はさっぱりとした塩に限りますね。。
カラムがNULLだった場合は…?
話は戻りますが、
今回、私はUPDATEしたいカラムがNULLだった場合を考慮せずUPDATEかけたところ、
NULLだったカラムには追加する文言が入るどころか、NULLのままになってました。
CONCATは引数のどちらかにNULLが入っていた場合はNULLを返すようです。
やっちまったぜ
そんな時はCOALESCE を使ってNULLを空文字に変換すれば文字の結合が可能です!
COALESCEの使い方
UPDATE テーブル名 SET カラム名 = CONCAT('追加する文言' , COALESCE(カラム名, '')) WHERE id = 1;
これでカラムがNULLの場合は、空文字を返し文字を結合するため、追加したい文言だけ追加される形となります。