カテゴリ:

日付と時刻の関数

DATEADD

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

エイリアス:

TIMEADDTIMESTAMPADD

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

ADD_MONTHS

構文

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

引数

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

  • date_or_time_part が1日より小さい場合(例: hourminutesecond)、関数は 00:00:00.000を日付の開始時刻とする TIMESTAMP_NTZ 値を返します。

使用上の注意

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

日付に年を追加します。

SELECT TO_DATE('2013-05-08') AS v1, DATEADD(year, 2, TO_DATE('2013-05-08')) AS v;
Copy

出力:

+------------+------------+
| V1         | V          |
|------------+------------|
| 2013-05-08 | 2015-05-08 |
+------------+------------+
Copy

日付に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');
Copy

日付に2年と2時間を追加するクエリです。

SELECT d AS "DATE", dateadd(year, 2, d) AS add_2_years, 
    dateadd(hour, 2, d) AS add_2_hours
  FROM datetest;
Copy

出力:

+------------+-------------+-------------------------+
| DATE       | ADD_2_YEARS | ADD_2_HOURS             |
|------------+-------------+-------------------------|
| 2013-04-05 | 2015-04-05  | 2013-04-05 02:00:00.000 |
+------------+-------------+-------------------------+
Copy

タイムスタンプに時間を追加します。

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;
Copy

出力:

+-------------------------------+-------------------------------+
| V1                            | V                             |
|-------------------------------+-------------------------------|
| 2013-05-08 11:22:33.444000000 | 2013-05-08 13:22:33.444000000 |
+-------------------------------+-------------------------------+
Copy

結果の月と同じか、それ以上の日がある月の日付に1か月を追加します。たとえば、今日が1月31日の場合、1か月を追加しても「2月31日」は表示 されません

SELECT DATEADD(MONTH, 1, '2000-01-31'::DATE) AS DIFFERENT_DAY;
Copy

出力:

+---------------+
| DIFFERENT_DAY |
|---------------|
| 2000-02-29    |
+---------------+
Copy

結果の月よりも日数が少ない月の日付に1か月を追加します。2月29日に1か月を追加すると3月29日になりますが、これは安全です。

SELECT DATEADD(MONTH, 1, '2000-02-29'::DATE) AS RESULT;
Copy

出力:

+------------+
| RESULT     |
|------------|
| 2000-03-29 |
+------------+
Copy