MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのCONCAT_WS()関数で文字列連結時にNULL値を渡すと、出力はどうなる?

CONCAT_WS()関数とNULL値の関係

MySQLのCONCAT_WS()関数がNULLを返すのは、第1引数(区切り文字)がNULLである場合のみです。それ以外の場合は、NULLが含まれていても連結処理が実行されます。まず、区切り文字にNULLを指定した例を見てみましょう。

mysql> Select CONCAT_ws(NULL,'Tutorial','Point','.com');
+-------------------------------------------+
| CONCAT_ws(NULL,'Tutorial','Point','.com') |
+-------------------------------------------+
| NULL |
+-------------------------------------------+
1 row in set (0.00 sec)

上記の結果のとおり、区切り文字がNULLだと、関数全体の戻り値もNULLになります。これはCONCAT_WS()関数の重要な仕様であり、動的なクエリを組む際には注意が必要です。

区切り文字以外のNULLは無視される

一方、NULLを連結対象の文字列として指定した場合、そのNULLは単純に無視され、残りの文字列だけが区切り文字で連結されます。以下の2つの例で確認できます。

mysql> Select CONCAT_ws('s','Tutorial','Point','.com',NULL);
+-----------------------------------------------+
| CONCAT_ws('s','Tutorial','Point','.com',NULL) |
+-----------------------------------------------+
| TutorialsPoints.com |
+-----------------------------------------------+
1 row in set (0.00 sec)

mysql> Select CONCAT_ws('s','Tutorial',NULL,'Point','.com');
+-----------------------------------------------+
| CONCAT_ws('s','Tutorial',NULL,'Point','.com') |
+-----------------------------------------------+
| TutorialsPoints.com |
+-----------------------------------------------+
1 row in set (0.00 sec)

1つ目の例ではNULLが末尾に、2つ目の例ではNULLが文字列の途中に配置されていますが、どちらの場合も結果は同じ「TutorialsPoints.com」となります。NULLの位置に区切り文字が余分に挿入されることもありません。

まとめ

CONCAT_WS()関数のNULL値の扱いを整理すると、以下のようになります。

  • 区切り文字(第1引数)がNULL → 戻り値はNULL
  • 連結対象の文字列にNULLが含まれる → NULLは無視され、他の文字列のみ連結される

この仕様を理解しておくと、データベース内にNULLが混在するカラムを安全に連結したい場合に、CONCAT_WS()が通常のCONCAT()関数よりも便利に使えます。CONCAT()関数は引数に1つでもNULLが含まれると全体がNULLになってしまうためです。

  1. ビット値が1でも最初の文字列がNULLの場合、MySQLのMAKE_SET()関数は何を返す?

    MySQLのMAKE_SET()関数におけるNULL文字列の扱いMySQLのMAKE_SET()関数は、指定されたビット値に基づいて複数の文字列からセットを構築して返す関数です。ただし、ビットの値が1であっても、そのビットに対応する文字列がNULLである場合、関数はその文字列を結果に含めず、何も返しません(空の結果となります)。動作の仕組みMAKE_SET()関数では、第1引数のビット値によってどの文字列を選択するかが決まります。最下位ビット(値1)は最初の文字列に、次のビット(値2)は2番目の文字列に、というように各ビットが順番に対応しています。そして、選択対象となった文字列がNULLだった

  2. MySQLの算術式でNULL値を使用すると、出力結果はどうなる?

    まず前提として、NULLとは「値が存在しない」ことを意味し、ゼロ(0)とはまったく別のものです。MySQLでは、データベースのカラムにデータが格納されていない場合、そのカラムの値はNULLとして扱われます。ここで重要なポイントは、算術式の中にNULLが含まれていると、その計算結果も必ずNULLになるという点です。足し算・引き算・掛け算・割り算など、どの演算であっても同様です。具体例:算術式にNULLを含めた場合の出力実際に、数値「65」とNULLを組み合わせたさまざまな演算を実行してみましょう。mysql> Select 65/NULL,65+NULL,65*NULL,65-NULL,6