CONCAT_WS()関数でNULLを扱うとMySQLは何を返す?3つのケースを実例付きで解説
CONCAT_WS()関数は、指定した区切り文字を使って複数の文字列を連結できるMySQLの便利な関数です。しかし、引数や区切り文字にNULLを指定した場合、その挙動はケースによって異なります。この記事では、3つのパターンに分けて、実際の実行例とともにわかりやすく解説します。
両方の引数にNULLを指定した場合
CONCAT_WS()関数の両方の引数にNULLを指定すると、MySQLは空白(空の出力)を返します。エラーにはなりませんが、何も連結されない点に注意が必要です。
実行例
mysql> Select CONCAT_WS('',NULL,NULL);
+-------------------------+
| CONCAT_WS('',NULL,NULL) |
+-------------------------+
| |
+-------------------------+
1 row in set (0.00 sec)
引数の1つにNULLを指定した場合
CONCAT_WS()関数の引数のうち1つだけがNULLである場合、MySQLはNULL以外のもう一方の引数の値を出力として返します。これは、CONCAT_WS()が引数内のNULL値を自動的にスキップして処理する仕様になっているためです。
実行例
mysql> Select CONCAT_WS('',NULL,'Delhi');
+----------------------------+
| CONCAT_WS('',NULL,'Delhi') |
+----------------------------+
| Delhi |
+----------------------------+
1 row in set (0.00 sec)
mysql> Select CONCAT_WS('','Ram',NULL);
+--------------------------+
| CONCAT_WS('','Ram',NULL) |
+--------------------------+
| Ram |
+--------------------------+
1 row in set (0.00 sec)
上記の例のように、どちらの位置にNULLがある場合でも、残りの有効な値のみが返されることが確認できます。
区切り文字としてNULLを指定した場合
CONCAT_WS()関数の第1引数である区切り文字の位置にNULLを指定すると、MySQLは結果としてNULLを返します。区切り文字が無効になると連結処理全体が成立しないため、この挙動は覚えておきましょう。
実行例
mysql> Select CONCAT_WS(NULL, 'NEW','DELHI'); +--------------------------------+ | CONCAT_WS(NULL, 'NEW','DELHI') | +--------------------------------+ | NULL | +--------------------------------+ 1 row in set (0.00 sec)
まとめ
- 両方の引数がNULLの場合: 空白(空文字列)が返される
- 引数の1つだけがNULLの場合:
NULL以外の値がそのまま返される - 区切り文字がNULLの場合: 結果全体が
NULLになる
CONCAT_WS()関数は引数内のNULLを柔軟にスキップしてくれる一方で、区切り文字にNULLを渡すと結果全体がNULLになってしまうため、実務でデータを連結する際には、特に区切り文字の扱いに注意することが重要です。
-
MySQLのIFNULL()制御フロー関数の使い方と活用例を解説
MySQLのIFNULL()は制御フロー関数の一つで、第1引数がNULLでない場合はその値をそのまま返し、NULLである場合には第2引数の値を返します。データベース操作において、NULL値を別のデフォルト値に置き換えたい場面で非常に便利な関数です。IFNULL()関数の基本構文IFNULL(expression1, expression2)この関数の動作は以下の通りです。expression1(第1引数)がNULLでない場合 → expression1を返すexpression1がNULLの場合 → expression2を返す両方の引数がNULLの場合 → NULLを返す具体的な使用例実際に
-
ビット値が1でも最初の文字列がNULLの場合、MySQLのMAKE_SET()関数は何を返す?
MySQLのMAKE_SET()関数におけるNULL文字列の扱いMySQLのMAKE_SET()関数は、指定されたビット値に基づいて複数の文字列からセットを構築して返す関数です。ただし、ビットの値が1であっても、そのビットに対応する文字列がNULLである場合、関数はその文字列を結果に含めず、何も返しません(空の結果となります)。動作の仕組みMAKE_SET()関数では、第1引数のビット値によってどの文字列を選択するかが決まります。最下位ビット(値1)は最初の文字列に、次のビット(値2)は2番目の文字列に、というように各ビットが順番に対応しています。そして、選択対象となった文字列がNULLだった