MySQLのCOALESCE()関数は、すべての引数がNULLの場合に何を返すのか?
すべての引数がNULLだった場合のCOALESCE()関数の戻り値
MySQLのCOALESCE()関数は、引数として渡された値のリストの中から、最初に見つかった非NULL(NULL以外)の値を返す関数です。
しかし、提供されたすべての引数がNULLであった場合、COALESCE()関数はNULLをそのまま返します。これは、リスト内に非NULLの値がひとつも存在しなかったことを意味します。
実行例
以下のように、4つの引数すべてにNULLを指定してCOALESCE()関数を実行すると、結果はNULLになります。
mysql> Select COALESCE(NULL, NULL, NULL, NULL); +----------------------------------+ | COALESCE(NULL, NULL, NULL, NULL) | +----------------------------------+ | NULL | +----------------------------------+ 1 row in set (0.00 sec)
ポイントまとめ
- COALESCE()関数は左から順に引数を評価し、最初の非NULL値を返す。
- すべての引数がNULLの場合、戻り値もNULLになる。
- デフォルト値の代わりとして使う場合は、最後の引数に必ず非NULLの値を指定しておくと安全です。
-
MySQLのMAKE_SET()関数:文字列がすべてNULLの場合に何が返されるか?
MySQLのMAKE_SET()関数では、引数として渡された文字列がすべてNULLである場合、結果として空の文字列が返されます。これは、MAKE_SET()関数がビットマスクに基づいて文字列を選択する仕組みを持っているためです。選択対象となる有効な文字列が一つも存在しない場合、関数は何も含まない空の結果を返します。動作例以下の例では、3つの引数すべてにNULLを指定してMAKE_SET()関数を実行しています。mysql> Select MAKE_SET(2, NULL,NULL,NULL); +-----------------------------+ | MAKE_SET(2, N
-
ビット値が1でも最初の文字列がNULLの場合、MySQLのMAKE_SET()関数は何を返す?
MySQLのMAKE_SET()関数におけるNULL文字列の扱いMySQLのMAKE_SET()関数は、指定されたビット値に基づいて複数の文字列からセットを構築して返す関数です。ただし、ビットの値が1であっても、そのビットに対応する文字列がNULLである場合、関数はその文字列を結果に含めず、何も返しません(空の結果となります)。動作の仕組みMAKE_SET()関数では、第1引数のビット値によってどの文字列を選択するかが決まります。最下位ビット(値1)は最初の文字列に、次のビット(値2)は2番目の文字列に、というように各ビットが順番に対応しています。そして、選択対象となった文字列がNULLだった