カテゴリ:

日付と時刻の関数

TIMESTAMPADD

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

DATEADD のエイリアス。

構文

TIMESTAMPADD( <date_or_time_part> , <time_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 (またはそれらのバリエーション)の場合、結果の月の日が元の日よりも少ない場合、結果の月の日は元の日と異なる場合があります。

TIMEADD と TIMESTAMPADD 関数は DATEADD 関数のエイリアスです。例にあるこれら3つの関数のいずれを使用しても、同じ結果を返すことができます。

日付に年を追加します。

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 | +---------------------+ 

時刻に時間を追加します。

SELECT TO_TIME('05:00:00') AS original_time, DATEADD(hour, 3, TO_TIME('05:00:00')) AS time_plus_three_hours; 
Copy
+---------------+-----------------------+ | ORIGINAL_TIME | TIME_PLUS_THREE_HOURS | |---------------+-----------------------| | 05:00:00 | 08:00:00 | +---------------+-----------------------+