sql >> データベース >  >> RDS >> Mysql

MySQL DATEDIFF()とTIMEDIFF():違いは何ですか?

    MySQLに含まれる2つの日付関数はDATEDIFF()です。 およびTIMEDIFF()

    どちらの関数も似たようなことをしますが、いくつかの意味のある違いがあります。

    次の表は、これら2つの機能の違いをまとめたものです。

    DATEDIFF() TIMEDIFF()
    結果は日数で表されます。 結果は時間値として表されます。
    引数の日付値のみを比較します。 引数の時間値を比較します。
    日付または日時の式を受け入れます。 時刻または日付と時刻の式を受け入れます。
    どちらの引数も異なるタイプ(日付または日時)にすることができます。 両方の引数は同じタイプ(時刻または日時)である必要があります。

    例1-基本的な違い

    これらの機能の基本的な違いを示す例を次に示します。

    SET @date1 = '2010-10-11 00:00:00', @date2 = '2010-10-10 00:00:00';
    SELECT 
      DATEDIFF(@date1, @date2) AS 'DATEDIFF',
      TIMEDIFF(@date1, @date2) AS 'TIMEDIFF';
    

    結果:

    +----------+----------+
    | DATEDIFF | TIMEDIFF |
    +----------+----------+
    |        1 | 24:00:00 |
    +----------+----------+
    

    したがって、DATEDIFF() 返された1 、「1日」を意味し、TIMEDIFF() 返された24:00:00 これは正確に1日の時間表現です。

    例2–時間値の指定

    変数の1つの時間値を増やすとどうなるか見てみましょう。

    SET @date1 = '2010-10-11 12:15:35', @date2 = '2010-10-10 00:00:00';
    SELECT 
      DATEDIFF(@date1, @date2) AS 'DATEDIFF',
      TIMEDIFF(@date1, @date2) AS 'TIMEDIFF';
    

    結果:

    +----------+----------+
    | DATEDIFF | TIMEDIFF |
    +----------+----------+
    |        1 | 36:15:35 |
    +----------+----------+
    

    したがって、DATEDIFF() 前の例と同じ結果を返します。これは、日付値のみを比較するためです(時間値は無視されます)。

    TIMEDIFF() 一方、関数は時間を比較するため、より正確な結果を返します。これは、2つの日付と時刻の値の間に36時間、15分、および35秒があることを示しています。

    例3–間違った引数タイプ

    各関数に間違った引数タイプを渡した場合の例を次に示します。

    SET @date1 = '2010-10-11', @date2 = '2010-10-10', @time1 = '12:15:35', @time2 = '00:00:00';
    SELECT 
      DATEDIFF(@date1, @date2) AS 'DATEDIFF Date',
      DATEDIFF(@time1, @time2) AS 'DATEDIFF Time',
      TIMEDIFF(@date1, @date2) AS 'TIMEDIFF Date',
      TIMEDIFF(@time1, @time2) AS 'TIMEDIFF Time';
    

    結果:

    +---------------+---------------+---------------+---------------+
    | DATEDIFF Date | DATEDIFF Time | TIMEDIFF Date | TIMEDIFF Time |
    +---------------+---------------+---------------+---------------+
    |             1 |          NULL | 00:00:00      | 12:15:35      |
    +---------------+---------------+---------------+---------------+
    

    正しい引数タイプが渡されたため、最初と最後の結果は問題ありません。ただし、真ん中の2つの結果には間違ったデータ型が渡されたため、正しい結果を計算できませんでした。

    例4–混合引数タイプ

    各関数に2つの異なるデータ型を指定するとどうなりますか。

    SET @thedate = '2010-10-11', @thetime = '12:15:35', @thedatetime = '2010-10-10 00:00:00';
    SELECT 
      DATEDIFF(@thedate, @thedatetime) AS 'DATEDIFF',
      TIMEDIFF(@thetime, @thedatetime) AS 'TIMEDIFF';
    

    結果:

    +----------+----------+
    | DATEDIFF | TIMEDIFF |
    +----------+----------+
    |        1 | NULL     |
    +----------+----------+
    

    したがって、DATEDIFF() 混合データ型を適切に処理します(日付または日時のいずれかである限り)。

    ただし、TIMEDIFF() 両方の引数が同じタイプである必要があるため、NULLを取得します 、両方の引数が関数がサポートするタイプ(時刻と日付と時刻)であっても。

    次の例で、両方のタイプが実際にこの関数でサポートされていることを確認できます。

    SET @thetime1 = '12:15:35', @thetime2 = '10:15:35', @thedatetime1 = '2010-10-12 00:00:00', @thedatetime2 = '2010-10-10 00:00:00';
    SELECT 
      TIMEDIFF(@thetime1, @thetime2) AS 'time',
      TIMEDIFF(@thedatetime1, @thedatetime2) AS 'datetime';
    

    結果:

    +----------+----------+
    | time     | datetime |
    +----------+----------+
    | 02:00:00 | 48:00:00 |
    +----------+----------+
    

    1. 予算内での分割

    2. Microsoft Access –基本

    3. SQLServer2019でMDFファイルを管理する

    4. MySQLチュートリアル–MySQLを学ぶための初心者向けガイド