Edited at

CONCATでの文字列連結時にひとつでもNULLな項目があると「NULL」扱いになってしまう

More than 3 years have passed since last update.

例えばこんな状態のテーブルがあるとします.

id
column_a
column_b
column_c

1
a
b
c

2
a
b
NULL

3
a
NULL
c

で, こんなqueryを実行すると...

SELECT id, CONCAT(column_a, column_b, column_c) AS column_abc FROM `test_201503`;

こうなってしまいます.

id
column_abc

1
abc

2
NULL

3
NULL

id 2の行も3の行も値が入ってるのにNULL扱いに...

これを避けるにはIFNULLを使用します.

SELECT id, CONCAT(IFNULL(column_a, ""), IFNULL(column_b, ""), IFNULL(column_c,"")) AS column_abc FROM `test_201503`;

すると, 期待していた値が表示されます.

id
column_abc

1
abc

2
ab

3
ac

そもそも文字列型のカラムだとNULLでなく空文字が入ってることが多いので再現少なくて気づきにくいんですよね.

参考:

http://www.happyquality.com/2009/03/16/877.htm