MySQLのFIELD()関数で検索文字列にNULLを指定した場合、戻り値はどうなる?
FIELD()関数とNULLの挙動について
MySQLのFIELD()関数は、指定した文字列が引数リストの中で何番目に位置するかを返す関数です。しかし、ここで一つ重要なポイントがあります。それはNULLの扱いです。
SQLにおいて、NULLはいかなる値とも等価比較(=)が成立しないという特性を持っています。そのため、FIELD()関数の第一引数である検索文字列にNULLを指定した場合、リスト内のどの値とも一致しないことになり、MySQLは0を返します。
実行例
実際に、検索文字列としてNULLを指定してFIELD()関数を実行してみましょう。
mysql> Select FIELD(NULL,'Ram','is','good','boy'); +-------------------------------------+ | FIELD(NULL,'Ram','is','good','boy') | +-------------------------------------+ | 0 | +-------------------------------------+ 1 row in set (0.00 sec)
上記の結果のように、検索文字列がNULLであるため、'Ram'、'is'、'good'、'boy'のどれとも一致せず、戻り値は0となっています。
補足:FIELD()関数の基本的な使い方
参考までに、通常のケースでは以下のように一致する位置(1から始まるインデックス)が返されます。
mysql> Select FIELD('good','Ram','is','good','boy');
+---------------------------------------+
| FIELD('good','Ram','is','good','boy') |
+---------------------------------------+
| 3 |
+---------------------------------------+このように、FIELD()関数ではNULLを渡してもエラーにはならず、単純に0が返される点を覚えておくと、実務でのクエリ作成時に役立ちます。
-
ビット値が1でも最初の文字列がNULLの場合、MySQLのMAKE_SET()関数は何を返す?
MySQLのMAKE_SET()関数におけるNULL文字列の扱いMySQLのMAKE_SET()関数は、指定されたビット値に基づいて複数の文字列からセットを構築して返す関数です。ただし、ビットの値が1であっても、そのビットに対応する文字列がNULLである場合、関数はその文字列を結果に含めず、何も返しません(空の結果となります)。動作の仕組みMAKE_SET()関数では、第1引数のビット値によってどの文字列を選択するかが決まります。最下位ビット(値1)は最初の文字列に、次のビット(値2)は2番目の文字列に、というように各ビットが順番に対応しています。そして、選択対象となった文字列がNULLだった
-
MySQLの<=>演算子とは?NULL安全な等価比較の使い方を解説
MySQLには、NULL値も安全に比較できる特殊な等価演算子 <=>(NULL安全等価演算子)が用意されています。この記事では、<=> 演算子の動作と、通常の = 演算子との違いを具体例とともに解説します。 ケース1:通常の値の比較(= 演算子と同じ動作) <=> 演算子は、NULL以外の値同士を比較する場合、= 演算子とまったく同じように動作します。つまり、両辺の値が等しければ「1(TRUE)」、等しくなければ「0(FALSE)」を返します。 たとえば、次のような比較では、どちらの演算子でも結果は同じになります。 mysql> SELECT 10