[MySQL]nullを含むフィールドのconcat | HappyQuality
- CONCAT(‘A’, ‘B’) → ‘AB’
- CONCAT(‘A’, null) → null
てっきり、空の文字列として処理されるんだと思ってました。
…ってマニュアルにきちんと書かれてるね。
引数のいずれかかが NULL である場合、CONCAT() は NULL を返します。
MySQL :: MySQL 8.0 リファレンスマニュアル :: 12.8 文字列関数および演算子
そうかー。
読んだはずだけど甘かった。
でどうしたらいいかって言うと、IFNULLを使って明示的にnull以外の要素(例えば””)を返すと。
CONCAT(IFNULL(fieldA, ''), IFNULL(fieldB, ''))
この場合、各フィールドがnullの時には空の文字列として扱うので、結合してもnullにならない。
fieldAが文字列A、fieldBがnullだった場合、結合結果は文字列Aになる。なるほど。
しかし、MySQLの関数って意外に色々あって面白いね。
クエリの速度下げたら意味無いけど、処理トータルで考えると使える場面も多々ありそう。
まぁSQLを手で書くの?という話ではあるかも知れないけども。