- カテゴリ:
DATEADD¶
指定された日付または時刻部分の指定された値を日付、時刻、またはタイムスタンプに追加します。
- エイリアス:
- こちらもご参照ください。
構文¶
DATEADD( <date_or_time_part>, <value>, <date_or_time_expr> )
引数¶
date_or_time_part
これは、追加する時間単位を示します。例えば、2日追加したい場合は、
day
を指定します。この測定単位は、 サポートされている日付と時刻の部分 にリストされている値のいずれかでなければなりません。value
これは、追加する時間単位の数です。例えば、時間の単位が
day
で、2日追加したい場合、2
を指定します。2日差し引きたい場合は、-2
を指定します。date_or_time_expr
date_or_time_expr
は、日付、時間、またはタイムスタンプに評価される必要があります。これは、追加する日付、時刻、またはタイムスタンプです。例えば2024年8月1日に、2日追加する場合、'2024-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('2022-05-08') AS original_date,
DATEADD(year, 2, TO_DATE('2022-05-08')) AS date_plus_two_years;
+---------------+---------------------+
| ORIGINAL_DATE | DATE_PLUS_TWO_YEARS |
|---------------+---------------------|
| 2022-05-08 | 2024-05-08 |
+---------------+---------------------+
日付から年数を差し引きます。
SELECT TO_DATE('2022-05-08') AS original_date,
DATEADD(year, -2, TO_DATE('2022-05-08')) AS date_minus_two_years;
+---------------+----------------------+
| ORIGINAL_DATE | DATE_MINUS_TWO_YEARS |
|---------------+----------------------|
| 2022-05-08 | 2020-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 ('2022-04-05');
ある日付に2年と2時間を追加するクエリを実行します。
SELECT d AS original_date,
DATEADD(year, 2, d) AS date_plus_two_years,
TO_TIMESTAMP(d) AS original_timestamp,
DATEADD(hour, 2, d) AS timestamp_plus_two_hours
FROM datetest;
+---------------+---------------------+-------------------------+--------------------------+
| ORIGINAL_DATE | DATE_PLUS_TWO_YEARS | ORIGINAL_TIMESTAMP | TIMESTAMP_PLUS_TWO_HOURS |
|---------------+---------------------+-------------------------+--------------------------|
| 2022-04-05 | 2024-04-05 | 2022-04-05 00:00:00.000 | 2022-04-05 02:00:00.000 |
+---------------+---------------------+-------------------------+--------------------------+
結果の月と同じか、それよりも日数が多い月の日付に1か月を追加します。例えば、日付が1月31日の場合、1か月を追加して2月31日を返すべきでは ありません。
SELECT DATEADD(month, 1, '2023-01-31'::DATE) AS date_plus_one_month;
+---------------------+
| DATE_PLUS_ONE_MONTH |
|---------------------|
| 2023-02-28 |
+---------------------+
結果の月よりも日数が少ない月の日付に1か月を追加します。2月28日に1か月追加すると3月28日が返されます。
SELECT DATEADD(month, 1, '2023-02-28'::DATE) AS date_plus_one_month;
+---------------------+
| DATE_PLUS_ONE_MONTH |
|---------------------|
| 2023-03-28 |
+---------------------+