カテゴリ:

日付と時刻の関数

DATEADD

指定された日付または時刻部分の指定された値を日付、時刻、またはタイムスタンプに追加します。

エイリアス:

TIMEADDTIMESTAMPADD

こちらもご参照ください。

ADD_MONTHS

構文

DATEADD( <date_or_time_part>, <value>, <date_or_time_expr> )
Copy

引数

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_partday 以上の場合(例えば、 monthyear)、関数は DATE の値を返します。

  • date_or_time_part が1日未満の場合(例えば、 hourminutesecond)、関数は 00:00:00.000 を日付の開始時刻とする TIMESTAMP_NTZ 値を返します。

使用上の注意

date_or_time_partyearquarter、または month (またはそれらのバリエーション)の場合、結果の月の日が元の日よりも少ない場合、結果の月の日は元の日と異なる場合があります。

日付に年を追加します。

SELECT TO_DATE('2022-05-08') AS original_date,
       DATEADD(year, 2, TO_DATE('2022-05-08')) AS date_plus_two_years;
Copy
+---------------+---------------------+
| 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;
Copy
+---------------+----------------------+
| 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');
Copy

ある日付に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;
Copy
+---------------+---------------------+-------------------------+--------------------------+
| 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;
Copy
+---------------------+
| 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;
Copy
+---------------------+
| DATE_PLUS_ONE_MONTH |
|---------------------|
| 2023-03-28          |
+---------------------+