MySQLのELT()関数に整数以外のインデックス番号を指定するとどうなる?NULLと警告が返る仕組み
MySQLのELT()関数では、第1引数として必ず整数値を指定する必要があります。しかし、誤って整数以外の値(文字列など)をインデックス番号として渡した場合でも、MySQLはエラーで処理を中断するのではなく、NULLを返し、警告(Warning)を出力して処理を続行します。
動作例:文字列をインデックスに指定した場合
以下の例では、第1引数に文字列「'one'」を指定しています。クエリ自体は正常に実行されますが、戻り値はNULLとなり、同時に1件の警告が発生します。
mysql> select ELT('one','Ram,is,good,boy') As Result;
+--------+
| Result |
+--------+
| NULL |
+--------+
1 row in set, 1 warning (0.00 sec)SHOW WARNINGSで警告内容を確認する
続けてSHOW WARNINGS文を実行すると、警告の詳細を確認できます。警告コード1292として、「Truncated incorrect INTEGER value: 'one'(不正なINTEGER値 'one' が切り詰められました)」というメッセージが表示されます。
mysql> Show Warnings; +---------+------+------------------------------------------+ | Level | Code | Message | +---------+------+------------------------------------------+ | Warning | 1292 | Truncated incorrect INTEGER value: 'one' | +---------+------+------------------------------------------+ 1 row in set (0.00 sec)
このように、ELT()関数は無効なインデックスを受け取ってもクエリ全体を失敗させることなく、NULLと警告という形で緩やかに処理を続けます。意図しないNULLが返された場合は、まず第1引数が正しい整数になっているかどうかを確認し、必要に応じてSHOW WARNINGSで詳細をチェックすることをおすすめします。
-
MySQL INTERVAL()関数:引数リストに第1引数より大きい数値がない場合に返される値とは?
INTERVAL()関数の戻り値の挙動MySQLのINTERVAL()関数は、引数リストの中に第1引数より大きい数値がひとつも存在しない場合、「引数リスト内の最後の数値のインデックス番号+1」を返します。言い換えれば、リストの末尾のインデックス番号に1を加えた値が戻り値となるのです。具体的な動作例以下の例では、第1引数として「50」を指定し、比較対象の数値リストとして「20、32、38、40」を渡しています。このリストには50より大きい数値が存在しないため、関数は「4」を返します。mysql> Select INTERVAL(50,20,32,38,40); +-------------
-
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)