検索文字列がFIELD()関数の引数リストに存在しない場合、MySQLは何を返す?
MySQLのFIELD()関数は、第1引数で指定した検索文字列が、それ以降の引数として渡された文字列リストの中で何番目に位置するかを返す関数です。しかし、検索文字列が引数として指定された文字列リストの中に存在しない場合、MySQLはエラーではなく 0 を返します。
動作例
以下の例では、検索文字列「Ram」は引数リスト「New」「Delhi」の中に含まれていないため、結果として0が返されます。
mysql> Select FIELD('Ram','New','Delhi');
+----------------------------+
| FIELD('Ram','New','Delhi') |
+----------------------------+
| 0 |
+----------------------------+
1 row in set (0.00 sec)補足:FIELD()関数の戻り値のまとめ
- 検索文字列がリスト内に見つかった場合 → その位置(1から始まるインデックス)を返す
- 検索文字列がリスト内に見つからない場合 → 0 を返す
- 検索文字列がNULLの場合 → 0 を返す
この特性を利用すると、特定の値がリストに含まれているかどうかの判定や、ORDER BY句でのカスタム並べ替えなどに活用できます。
-
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だった