- カテゴリ:
DATEDIFF¶
要求された日付または時刻の部分に基づいて、2つの日付、時刻、またはタイムスタンプ式の差を計算します。この関数は、3番目の引数から2番目の引数を減算した結果を返します。
マイナス記号(-
)を使用して日付を減算することもできます。
- こちらもご参照ください。
構文¶
DATEDIFF の場合
DATEDIFF( <date_or_time_part>, <date_or_time_expr1>, <date_or_time_expr2> )
マイナス記号の場合
<date_expr2> - <date_expr1>
引数¶
DATEDIFF の場合:
date_or_time_part
時間の単位。 サポートされている日付と時刻の部分 (例:
month
)にリストされている値のいずれかでなければなりません。値は文字列リテラルにすることも、引用符で囲まないようにすることもできます(例:'month'
またはmonth
)。date_or_time_expr1
、date_or_time_expr2
比較する値。日付、時刻、タイムスタンプか、日付、時刻、またはタイムスタンプを評価できる式でなければなりません。値
date_or_time_expr1
がdate_or_time_expr2
から減算されます。
マイナス記号の場合:
date_expr1
、date_expr2
比較する値。日付、または日付に評価できる式でなければなりません。値
date_expr1
がdate_expr2
から減算されます。
戻り値¶
DATEDIFF の場合:
date_or_time_expr2
と date_or_time_expr1
の単位(秒、日など)の差を表す整数を返します。
マイナス記号の場合:
date_expr2
と date_expr1
の日数の差を表す整数を返します。(単位は常に日数です。)
使用上の注意¶
DATEDIFF とマイナス記号の両方の場合:
出力値は、-12日などの負の値にすることができます。
DATEDIFF の場合:
date_or_time_expr1
およびdate_or_time_expr2
は、日付、時刻、またはタイムスタンプにすることができます。関数は、年、四半期、月、週、日、時間、分、秒、ミリ秒、マイクロ秒、ナノ秒の単位をサポートします。
date_or_time_part
は、 サポートされている日付と時刻の部分 にリストされている値のいずれかでなければなりません。date_or_time_part
がweek
(またはそのバリエーション)である場合、出力は WEEK_START セッションパラメーターによって制御されます。例などの詳細については、 カレンダーの週と平日 をご参照ください。差の計算に使用される単位(例:
month
)は、 DATE、 TIME、または TIMESTAMP フィールドのどの部分が結果の決定に使用されるかを決定し、結果の精度を決定します。小さい単位は使用されないため、値は丸められません。たとえば、2021年1月1日と2021年2月28日の差が、1か月よりも2か月に近い場合でも、次のように1か月が返されます。
DATEDIFF(month, '2021-01-01'::DATE, '2021-02-28'::DATE)
DATE 値の場合:
year
は、年のみを使用し、他のすべての部分を無視します。month
は、月と年を使用します。day
は、日付全体を使用します。
TIME 値の場合:
hour
は、時のみを使用し、他のすべての部分を無視します。minute
は、時と分を使用します。second
は、時、分、秒を使用しますが、小数秒は使用しません。millisecond
は、時、分、秒、および小数秒の最初の3桁を使用します。小数秒は丸められません。たとえば、DATEDIFF(milliseconds, '00:00:00', '00:00:01.1239')
は1.124秒ではなく、1.123秒を返します。microsecond
は、時、分、秒、および小数秒の最初の6桁を使用します。小数秒は丸められません。nanosecond
は、時、分、秒、および小数秒の9桁すべてを使用します。
TIMESTAMP 値の場合:
ルールは、上記の DATE および TIME データ型のルールと一致します。指定された単位以上の単位のみが使用されます。
マイナス記号の場合:
date_expr1
とdate_expr2
は両方とも日付である必要があります。時間とタイムスタンプは許可されていません。
例¶
2つのタイムスタンプの年の差を計算します。
SELECT DATEDIFF(year, '2010-04-09 14:39:20'::TIMESTAMP, '2013-05-08 23:39:20'::TIMESTAMP) AS diff_years; +------------+ | DIFF_YEARS | |------------| | 3 | +------------+
2つのタイムスタンプの時間の差を計算します。
SELECT DATEDIFF(hour, '2013-05-08T23:39:20.123-07:00'::TIMESTAMP, DATEADD(year, 2, ('2013-05-08T23:39:20.123-07:00')::TIMESTAMP)) AS diff_hours; +------------+ | DIFF_HOURS | |------------| | 17520 | +------------+
日付部分が DATEDIFF 計算にどのように影響するかを示します。また、日付の減算にマイナス記号を使用する方法を示します。
SELECT column1 date_1, column2 date_2, DATEDIFF(year, column1, column2) diff_years, DATEDIFF(month, column1, column2) diff_months, DATEDIFF(day, column1, column2) diff_days, column2::DATE - column1::DATE AS diff_days_via_minus FROM VALUES ('2015-12-30', '2015-12-31'), ('2015-12-31', '2016-01-01'), ('2016-01-01', '2017-12-31'), ('2016-08-23', '2016-09-07'); +------------+------------+------------+-------------+-----------+---------------------+ | DATE_1 | DATE_2 | DIFF_YEARS | DIFF_MONTHS | DIFF_DAYS | DIFF_DAYS_VIA_MINUS | |------------+------------+------------+-------------+-----------+---------------------| | 2015-12-30 | 2015-12-31 | 0 | 0 | 1 | 1 | | 2015-12-31 | 2016-01-01 | 1 | 1 | 1 | 1 | | 2016-01-01 | 2017-12-31 | 1 | 23 | 730 | 730 | | 2016-08-23 | 2016-09-07 | 0 | 1 | 15 | 15 | +------------+------------+------------+-------------+-----------+---------------------+
時間部分が DATEDIFF の計算にどのように影響するかを示します。
ALTER SESSION SET TIMESTAMP_NTZ_OUTPUT_FORMAT = 'DY, DD MON YYYY HH24:MI:SS';SELECT column1 timestamp_1, column2 timestamp_2, DATEDIFF(hour, column1, column2) diff_hours, DATEDIFF(minute, column1, column2) diff_minutes, DATEDIFF(second, column1, column2) diff_seconds FROM VALUES ('2016-01-01 01:59:59'::TIMESTAMP, '2016-01-01 02:00:00'::TIMESTAMP), ('2016-01-01 01:00:00'::TIMESTAMP, '2016-01-01 01:59:00'::TIMESTAMP), ('2016-01-01 01:00:59'::TIMESTAMP, '2016-01-01 02:00:00'::TIMESTAMP); +---------------------------+---------------------------+------------+--------------+--------------+ | TIMESTAMP_1 | TIMESTAMP_2 | DIFF_HOURS | DIFF_MINUTES | DIFF_SECONDS | |---------------------------+---------------------------+------------+--------------+--------------| | Fri, 01 Jan 2016 01:59:59 | Fri, 01 Jan 2016 02:00:00 | 1 | 1 | 1 | | Fri, 01 Jan 2016 01:00:00 | Fri, 01 Jan 2016 01:59:00 | 0 | 59 | 3540 | | Fri, 01 Jan 2016 01:00:59 | Fri, 01 Jan 2016 02:00:00 | 1 | 60 | 3541 | +---------------------------+---------------------------+------------+--------------+--------------+