MySQLのCONCAT()関数でNULL値を連結すると出力はどうなる?
MySQLのCONCAT()関数は、文字列を連結する際に引数のいずれかにNULL値が含まれていると、結果としてNULLを返します。次の例でその挙動を確認してみましょう。
例
mysql> SELECT CONCAT('Tutorials',NULL,'Point');
+----------------------------------+
| CONCAT('Tutorials',NULL,'Point') |
+----------------------------------+
| NULL |
+----------------------------------+
1 row in set (0.06 sec)
mysql> SELECT CONCAT('TutorialsPoint','.com',NULL);
+--------------------------------------+
| CONCAT('TutorialsPoint','.com',NULL) |
+--------------------------------------+
| NULL |
+--------------------------------------+
1 row in set (0.00 sec)
上記の実行結果からわかるように、NULLが引数の先頭・中間・末尾のどの位置にあっても、CONCAT()関数は他の引数が有効な文字列であっても必ずNULLを返します。これはSQL標準に準拠した仕様です。
NULLを回避して文字列を連結する方法
NULL値を除外したまま文字列を連結したい場合は、CONCAT_WS()関数を使うのが便利です。CONCAT_WS()は第1引数に区切り文字を指定し、NULL以外の引数だけを自動的に連結してくれます。
mysql> SELECT CONCAT_WS(',', 'Tutorials', NULL, 'Point');
+--------------------------------------------+
| CONCAT_WS(',', 'Tutorials', NULL, 'Point') |
+--------------------------------------------+
| Tutorials,Point |
+--------------------------------------------+
1 row in set (0.00 sec)
また、IFNULL()やCOALESCE()関数を組み合わせれば、NULLを空文字列などの代替値に置き換えてから連結することも可能です。例:SELECT CONCAT(IFNULL(column_name, ''), 'テキスト');
-
ビット値が1でも最初の文字列がNULLの場合、MySQLのMAKE_SET()関数は何を返す?
MySQLのMAKE_SET()関数におけるNULL文字列の扱いMySQLのMAKE_SET()関数は、指定されたビット値に基づいて複数の文字列からセットを構築して返す関数です。ただし、ビットの値が1であっても、そのビットに対応する文字列がNULLである場合、関数はその文字列を結果に含めず、何も返しません(空の結果となります)。動作の仕組みMAKE_SET()関数では、第1引数のビット値によってどの文字列を選択するかが決まります。最下位ビット(値1)は最初の文字列に、次のビット(値2)は2番目の文字列に、というように各ビットが順番に対応しています。そして、選択対象となった文字列がNULLだった
-
MySQLの算術式でNULL値を使用すると、出力結果はどうなる?
まず前提として、NULLとは「値が存在しない」ことを意味し、ゼロ(0)とはまったく別のものです。MySQLでは、データベースのカラムにデータが格納されていない場合、そのカラムの値はNULLとして扱われます。ここで重要なポイントは、算術式の中にNULLが含まれていると、その計算結果も必ずNULLになるという点です。足し算・引き算・掛け算・割り算など、どの演算であっても同様です。具体例:算術式にNULLを含めた場合の出力実際に、数値「65」とNULLを組み合わせたさまざまな演算を実行してみましょう。mysql> Select 65/NULL,65+NULL,65*NULL,65-NULL,6