- カテゴリ:
DATEADD¶
指定された日付または時刻部分の指定された値を日付、時刻、またはタイムスタンプに追加します。
- エイリアス:
- こちらもご参照ください。
構文¶
DATEADD( <date_or_time_part>, <value>, <date_or_time_expr> )
引数¶
date_or_time_part
これは、追加する時間単位を示します。例えば、2日を追加する場合、これは
DAY
になります。この測定単位は、 サポートされている日付と時刻の部分 にリストされている値のいずれかでなければなりません。value
これは、追加する時間単位の数です。例えば、2日を追加する場合、これは2になります。
date_or_time_expr
date_or_time_expr
は、日付、時刻、またはタイムスタンプに評価される必要があります。これは、追加する日付、時刻、またはタイムスタンプです。例えば2018年8月1日に、2日を追加する場合、これは'2018-08-01'::DATE
になります。データ型が TIMEの場合、
date_or_time_part
は、日数以上ではなく、時間以下の単位でなければなりません。入力データ型が DATE で、
date_or_time_part
が時間以下の場合、入力値は拒否されず、代わりに時間、分、秒を持つ TIMESTAMP として扱われ、秒の端数はすべて最初に0に設定されます(例:指定された日付の午前0時)。
戻り値¶
date_or_time_expr
が時刻の場合:
返されるデータ型は時間です。
date_or_time_expr
がタイムスタンプの場合:
返されるデータ型はタイムスタンプです。
date_or_time_expr
が日付の場合:
date_or_time_part
がday
以上の場合(例:month
、year
)、関数は DATE 値を返します。
date_or_time_part
が1日より小さい場合(例:hour
、minute
、second
)、関数は 00:00:00.000を日付の開始時刻とする TIMESTAMP_NTZ 値を返します。
使用上の注意¶
date_or_time_part
がyear
、quarter
、またはmonth
(またはそれらのバリエーション)の場合、結果の月の日が元の日よりも少ない場合、結果の月の日は元の日と異なる場合があります。
例¶
日付に年を追加します。
SELECT TO_DATE('2013-05-08') AS v1, DATEADD(year, 2, TO_DATE('2013-05-08')) AS v;出力:
+------------+------------+ | V1 | V | |------------+------------| | 2013-05-08 | 2015-05-08 | +------------+------------+
日付に2年と2時間を追加します。
この例の最初のセットアップといくつかの後続の例です。
ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF9'; CREATE TABLE datetest (d date); INSERT INTO datetest VALUES ('2013-04-05');日付に2年と2時間を追加するクエリです。
SELECT d AS "DATE", dateadd(year, 2, d) AS add_2_years, dateadd(hour, 2, d) AS add_2_hours FROM datetest;出力:
+------------+-------------+-------------------------+ | DATE | ADD_2_YEARS | ADD_2_HOURS | |------------+-------------+-------------------------| | 2013-04-05 | 2015-04-05 | 2013-04-05 02:00:00.000 | +------------+-------------+-------------------------+
タイムスタンプに時間を追加します。
SELECT TO_TIMESTAMP_LTZ('2013-05-08 11:22:33.444') AS v1, DATEADD(HOUR, 2, TO_TIMESTAMP_LTZ('2013-05-08 11:22:33.444')) AS v;出力:
+-------------------------------+-------------------------------+ | V1 | V | |-------------------------------+-------------------------------| | 2013-05-08 11:22:33.444000000 | 2013-05-08 13:22:33.444000000 | +-------------------------------+-------------------------------+
結果の月と同じか、それ以上の日がある月の日付に1か月を追加します。たとえば、今日が1月31日の場合、1か月を追加しても「2月31日」は表示 されません。
SELECT DATEADD(MONTH, 1, '2000-01-31'::DATE) AS DIFFERENT_DAY;出力:
+---------------+ | DIFFERENT_DAY | |---------------| | 2000-02-29 | +---------------+
結果の月よりも日数が少ない月の日付に1か月を追加します。2月29日に1か月を追加すると3月29日になりますが、これは安全です。
SELECT DATEADD(MONTH, 1, '2000-02-29'::DATE) AS RESULT;出力:
+------------+ | RESULT | |------------| | 2000-03-29 | +------------+