カテゴリ:

日付と時刻の関数

TIMEADD

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

DATEADD のエイリアスです。

構文

TIMEADD( <date_or_time_part> , <value> , <date_or_time_expr> )

引数

日付または時刻部分

これは、追加する時間単位を示します。例えば、2日を追加する場合、これは DAY になります。この測定単位は、 サポートされている日付と時刻の部分 にリストされている値のいずれかでなければなりません。

これは、追加する時間単位の数です。例えば、2日を追加する場合、これは2になります。

日付または時刻式

日付または時刻式 は、日付、時刻、またはタイムスタンプに評価される必要があります。これは、追加する日付、時刻、またはタイムスタンプです。例えば2018年8月1日に、2日を追加する場合、これは '2018-08-01'::DATE になります。

データ型が TIMEの場合、 日付または時刻式 は、日数以上ではなく、時間以下の単位でなければなりません。

入力データ型が DATE で、 日付または時刻式 が時間以下の場合、入力値は拒否されず、代わりに時間、分、秒を持つ TIMESTAMP として扱われ、秒の端数はすべて最初に0に設定されます(例:指定された日付の午前0時)。

戻り値

日付または時刻式 が時刻の場合:

  • 返されるデータ型は時間です。

日付または時刻式 がタイムスタンプの場合:

  • 返されるデータ型はタイムスタンプです。

日付または時刻式 が日付の場合:

  • 日付または時刻部分day 以上の場合(例: monthyear)、関数は DATE 値を返します。

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

使用上の注意

  • 日付または時刻部分yearquarter、または 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月31日の場合、月を追加しても「2月31日」は表示されません。NOT

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

出力:

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

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

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

出力:

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