- カテゴリ:
TIMESTAMPADD¶
指定された日付または時刻部分の指定された値を日付、時刻、またはタイムスタンプに追加します。
DATEADD のエイリアス。
構文¶
TIMESTAMPADD( <date_or_time_part> , <time_value> , <date_or_time_expr> ) 引数¶
date_or_time_partこれは、追加する時間単位を示します。例えば、2日追加したい場合は、
dayを指定します。この測定単位は、 サポートされている日付と時刻の部分 にリストされている値のいずれかでなければなりません。valueこれは、追加する時間単位の数です。例えば、時間の単位が
dayで、2日追加したい場合、2を指定します。2日差し引きたい場合は、-2を指定します。date_or_time_exprdate_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 (またはそれらのバリエーション)の場合、結果の月の日が元の日よりも少ない場合、結果の月の日は元の日と異なる場合があります。
例¶
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; +---------------+---------------------+ | 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 | +---------------------+ 時刻に時間を追加します。
SELECT TO_TIME('05:00:00') AS original_time, DATEADD(hour, 3, TO_TIME('05:00:00')) AS time_plus_three_hours; +---------------+-----------------------+ | ORIGINAL_TIME | TIME_PLUS_THREE_HOURS | |---------------+-----------------------| | 05:00:00 | 08:00:00 | +---------------+-----------------------+