- カテゴリ:
DATEDIFF¶
要求された日付または時刻の部分に基づいて、2つの日付、時刻、またはタイムスタンプ式の差を計算します。この関数は、3番目の引数から2番目の引数を減算した結果を返します。
マイナス記号(「-」)を使用して日付を減算することもできます。
- こちらもご参照ください:
構文¶
DATEDIFFの構文
DATEDIFF( <date_or_time_part>, <date_or_time_expr1>, <date_or_time_expr2> )
マイナス記号の構文
<date_or_time_expr2> - <date_or_time_expr1>
引数¶
日付または時刻部分
は、 サポートされている日付と時刻の部分 にリストされている値のいずれかでなければなりません。日付または時刻式1
、日付または時刻式2
は、日付、時刻、タイムスタンプであるか、日付、時刻、またはタイムスタンプを評価できる式でなければなりません。値日付または時刻式1
が日付または時刻式2
から減算されます。
使用上の注意¶
値は、-12日などの負の値にすることができます。
DATEDIFFの場合
DATEDIFF は、年、四半期、月、週、日、時間、分、秒をサポートします。
日付または時刻部分
は、 サポートされている日付と時刻の部分 にリストされている値のいずれかでなければなりません。日付または時刻部分
がweek
(またはそのバリエーション)である場合、出力は WEEK_START セッションパラメーターによって制御されます。例などの詳細については、 カレンダーの週と平日 をご参照ください。日付または時刻式1
および日付または時刻式2
は、日付、時刻、またはタイムスタンプにすることができます。差の計算に使用される単位が日付部分(
year
、month
、day
など)または時間部分(hour
、minute
、second
など)の場合、関連する部分のみ使用されます。例:
year
は、日付から年のみを使用し、他のすべての部分を無視します。month
は、日付から月と年を使用します。day
は、日付全体を使用します。hour
は、時間/タイムスタンプの時間のみを使用し、他のすべての部分を無視します。minute
は、時間/タイムスタンプの時間と分を使用します。second
は、時間/タイムスタンプ全体を使用します。
詳細については、以下をご参照ください。
マイナス記号の場合
日付または時刻式1
と日付または時刻式2
は両方とも日付でなければなりません。
例¶
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 | +---------------------------+---------------------------+------------+--------------+--------------+