TIMEDIFF()関数の引数に日付と時刻の両方を指定すると、MySQLは何を返すのか?
MySQLのTIMEDIFF()関数の引数として、日付部分と時刻部分の両方を含む値(DATETIME型など)を指定した場合、MySQLは2つの日付・時刻値の差を計算し、その結果を時間値(TIME型)に変換して返します。
TIMEDIFF()関数の基本的な動作
TIMEDIFF()関数は、引数として渡された2つの日付・時刻式の差分を「HH:MM:SS」形式の時間値として返します。日付が異なる場合でも、差分が24時間を超える値として正しく表現される点が特徴です。なお、両方の引数は同じ型(TIME型同士、またはDATETIME型同士)である必要があります。
使用例
mysql> Select TIMEDIFF('2017-10-22 04:05:45', '2017-10-21 03:04:44')AS 'Difference in Time';
+--------------------+
| Difference in Time |
+--------------------+
| 25:01:01 |
+--------------------+
1 row in set (0.00 sec)
結果の解説
この例では、「2017-10-22 04:05:45」と「2017-10-21 03:04:44」という2つの日付・時刻値の差を求めています。日付が1日異なるため、単純な時刻部分だけの差である「01:01:01」ではなく、日付部分も考慮された「25:01:01」という結果が返されています。
このように、MySQLは日付・時刻値の差を自動的に時間値へ変換し、24時間を超える差分も問題なく処理します。日付をまたぐ時間差を計算したい場合に、TIMEDIFF()関数は非常に便利です。
-
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)
-
MySQLのINTERVAL()関数とは?構文と戻り値の仕組みを実例付きで解説
MySQLのINTERVAL()関数は、第1引数とそれ以降の複数の引数を比較し、「第1引数より大きい値」が最初に現れる位置(インデックス)を返す関数です。複数の閾値と一度に大小比較を行いたい場合などに活用できます。 INTERVAL()関数の構文 INTERVAL(N, N1, N2, N3, …) この関数は、第1引数であるNを、残りの引数であるN1、N2、N3…と順番に比較していきます。すべての引数は整数として扱われ、比較結果に応じて以下のような値を返します。 N < N1 の場合 → 0 を返す N < N2 の場合 → 1 を返す N < N3 の場合 → 2