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); +--------------------------+ | INTERVAL(50,20,32,38,40) | +--------------------------+ | 4 | +--------------------------+ 1 row in set (0.00 sec)
この結果からわかるように、第1引数の値がリスト内のすべての数値以上である場合、INTERVAL()関数は引数リストの要素数と同じ値を返します。これは、INTERVAL()関数が「第1引数より小さい(または等しい)最後の引数の位置」を基準にインデックスを算出する仕組みになっているためです。
-
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だった