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

MySQLのDATEDIFF()関数に時刻を含む日付値を指定した場合、どのような結果が返されるのか?

MySQLのDATEDIFF()関数は、日付と時刻の両方を含む値(DATETIME型など)を引数として受け取ることができます。しかし、この関数は計算の際に時刻部分を完全に無視するという重要な特徴を持っています。

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

そのため、引数に時刻コンポーネントが含まれていても、DATEDIFF()関数は時刻を無視し、2つの日付間の日数差のみを返します。

実行例1:1年差の日付の場合

mysql> Select DATEDIFF('2018-10-22 04:05:36','2017-10-22 03:05:45');
+-------------------------------------------------------+
| DATEDIFF('2018-10-22 04:05:36','2017-10-22 03:05:45') |
+-------------------------------------------------------+
|                                                   365 |
+-------------------------------------------------------+
1 row in set (0.00 sec)

実行例2:同じ日付で時刻のみ異なる場合

mysql> Select DATEDIFF('2017-10-22 04:05:36','2017-10-22 03:05:45');
+-------------------------------------------------------+
| DATEDIFF('2017-10-22 04:05:36','2017-10-22 03:05:45') |
+-------------------------------------------------------+
|                                                     0 |
+-------------------------------------------------------+
1 row in set (0.00 sec)

結果からわかること

上記のクエリ結果を見ると、次のことが確認できます。

  • 例1: 日付がちょうど1年(365日)異なるため、時刻がわずかに違っていても「365」が返されます。
  • 例2: 日付は同じで時刻だけが異なる場合、時刻の差が約1時間あっても「0」が返されます。

つまり、DATEDIFF()関数は日付同士の比較のみを行い、時・分・秒の情報は計算対象外となります。時刻まで含めた正確な差分を求めたい場合は、TIMESTAMPDIFF()関数など、時刻を考慮できる別の関数を使用することをおすすめします。

  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の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