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

MySQL ELT()関数でインデックス番号が文字列数を超える場合、NULLが返される理由と動作を解説

MySQL ELT()関数における範囲外のインデックス番号の扱い

MySQLのELT()関数は、引数として指定されたインデックス番号が文字列リストの数よりも大きい場合、NULLを返します。これはエラーではなく、正常な動作として設計されている点がポイントです。

つまり、文字列リストに存在しない位置を参照しようとした場合、ELT()関数はエラーを発生させることなく、静かにNULLを返す仕組みになっています。

実際の使用例

以下の例では、5つの文字列('Ram'、'is'、'a'、'good'、'boy')を渡しているにもかかわらず、インデックス番号として6を指定しています。

mysql> Select ELT(6,'Ram','is','a','good','boy') As Result;
+--------+
| Result |
+--------+
| NULL   |
+--------+
1 row in set (0.00 sec)

結果の解説

この例では、指定されたインデックス番号は6ですが、文字列リストには5つの文字列しか含まれていません。そのため、6番目の文字列は存在せず、MySQLは結果としてNULLを返します。

この動作を理解しておくことで、ELT()関数を使用する際に予期しないNULL値が返された場合でも、原因をすぐに特定できるようになります。実務では、インデックス番号が文字列の数の範囲内に収まっているかどうかを事前に確認することが重要です。

  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