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

FIELD()関数の引数(文字列リスト)がNULLの場合、MySQLは何を返す?

MySQLのFIELD()関数では、引数として渡された文字列のリスト(検索対象となる候補の文字列)がすべてNULLである場合、戻り値として0を返します。

FIELD()関数の基本的な動作

FIELD()関数は、第1引数で指定した文字列が、第2引数以降に指定された文字列リストの中で何番目に位置するかを返す関数です。一致する文字列が見つからない場合や、検索対象のリストが有効でない場合は0が返されます。

つまり、文字列リスト側の引数がすべてNULLであると、一致する文字列が存在しないことになるため、結果は0となります。

具体例

以下の例では、検索対象の文字列リストとして4つのNULLを指定しています。

mysql> Select FIELD('Ram', NULL, NULL, NULL, NULL);

+--------------------------------------+
| FIELD('Ram', NULL, NULL, NULL, NULL) |
+--------------------------------------+
|                                    0 |
+--------------------------------------+

1 row in set (0.00 sec)

このように、検索文字列「'Ram'」を指定していても、比較対象のリストがすべてNULLのため一致する要素が存在せず、MySQLは0を返します。

注意点

  • 第1引数(検索する文字列)自体がNULLの場合も、同様に0が返されます。
  • FIELD()関数は大文字小文字を区別せずに比較を行います(照合順序に依存します)。

この挙動を理解しておくことで、ORDER BY FIELD(...)などカスタムソートを行う際に、意図しない並び順や結果を防ぐことができます。

  1. MySQLのINTERVAL()関数で第1引数にNULLを指定した場合の戻り値とは?

    INTERVAL()関数の第1引数がNULLだった場合の戻り値MySQLのINTERVAL()関数は、第1引数と残りの引数リストを比較し、第1引数の値がどこまで続く範囲に該当するかを示すインデックスを返す関数です。そして重要なポイントとして、第1引数にNULLを指定した場合、戻り値は必ず-1になります。実際の動作を以下の例で確認してみましょう。mysql> Select INTERVAL(NULL,20,32,38,40,50,55);+--------------------------------------+| INTERVAL(NULL,20,32,38,40,50,55)

  2. 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