この関数は、時間単位 datepart に基づいて、指定された間隔 delta を日付 date またはタイムスタンプに追加します。
使用上の注意
この関数を GETDATE 関数と併用して、現在の時刻に特定の間隔を追加することで日付を取得できます。
構文
DATEADD(DATE|DATETIME|TIMESTAMP|TIMESTAMP_NTZ <date>, BIGINT <delta>, STRING <datepart>)パラメーター
date: 必須。日付またはタイムスタンプの値。このパラメーターは、DATE、DATETIME、TIMESTAMP、および TIMESTAMP_NTZ データ型をサポートします。
MaxCompute 1.0 データ型エディションでは、このパラメーターが
yyyy-mm-dd hh:mi:ssフォーマット (例:2025-07-21 00:00:00) の STRING の場合、暗黙的に DATETIME 型に変換されます。delta: 必須。追加する間隔。このパラメーターは BIGINT です。delta の値が 0 より大きい場合、間隔が追加されます。それ以外の場合は、間隔が減算されます。
MaxCompute 1.0 データ型エディションでは、このパラメーターが STRING または DOUBLE 値の場合、暗黙的に BIGINT 型に変換されます。
説明delta で指定された間隔を加算または減算すると、より大きい時間単位で桁上がりまたは桁借りが発生する場合があります。年、月、時、分、秒の各要素は、それぞれ 10 進数、12 進数、24 進数、60 進数を使用して計算されます。
delta の単位が月の場合、delta 間隔の delta 値を追加しても日のオーバーフローが発生しない場合、日の値は変更されません。それ以外の場合、日の値は結果の月の最終日に設定されます。
datepart: 必須。間隔の時間単位。このパラメーターは STRING 定数です。非定数値、サポートされていないフォーマット、または別のデータ型を指定すると、エラーが返されます。次の値がサポートされています。
時間単位
値
年
yearまたはyyyy四半期
quarterまたはq月
month、mon、またはmm週
week日
dayまたはdd時
hourまたはhh分
mi2 番目
ssミリ秒
ff3マイクロ秒
ff6
戻り値
DATE、DATETIME、TIMESTAMP、または TIMESTAMP_NTZ 型の値を返します。戻り値のデータ型は、入力 date パラメーターのデータ型と同じです。次のルールが適用されます。
date パラメーターのデータ型が DATE、DATETIME、TIMESTAMP、または TIMESTAMP_NTZ でない場合、エラーが返されます。
date パラメーターの値が NULL の場合、エラーが返されます。
delta または datepart パラメーターの値が NULL の場合、NULL が返されます。
例
例 1: 静的データの一般的な使用法
-- 戻り値は 2005-03-01 00:00:00 です。1 日が追加されます。結果はその年の 2 月の最終日を超えます。実際の値は翌月の最初の日です。 SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 1, 'dd'); -- 戻り値は 2005-02-27 00:00:00 です。1 日が減算されます。 SELECT DATEADD(DATETIME '2005-02-28 00:00:00', -1, 'dd'); -- 戻り値は 2006-10-28 00:00:00 です。20 か月が追加されます。月がオーバーフローし、年が 1 増加します。 SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 20, 'mm'); -- 戻り値は 2005-03-28 00:00:00 です。 SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 1, 'mm'); -- 戻り値は 2005-02-28 00:00:00 です。2005 年 2 月には 29 日がありません。日付は月の最終日に切り捨てられます。 SELECT DATEADD(DATETIME '2005-01-29 00:00:00', 1, 'mm'); -- 戻り値は 2005-02-28 00:00:00 です。 SELECT DATEADD(DATETIME '2005-03-30 00:00:00', -1, 'mm'); -- 戻り値は 2005-05-28 です。 SELECT DATEADD(DATE '2005-02-28', 1, 'quarter'); -- 戻り値は 2005-03-18 です。 SELECT DATEADD(DATE '2005-02-18', 1, 'mm'); -- 戻り値は 2005-03-14 00:00:00 です。 SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 2, 'week'); -- 戻り値は 2005-03-14 00:00:00.123 です。 SELECT DATEADD(TIMESTAMP '2005-02-28 00:00:00.123', 14, 'day'); -- 戻り値は 2005-03-30 02:24:00 です。3 時間が減算されます。 SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -3, 'hh'); -- 戻り値は 2005-03-30 04:54:00 です。30 分が減算されます。 SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -30, 'mi'); -- 戻り値は 2005-03-30 05:23:30 です。30 秒が減算されます。 SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -30, 'ss'); -- 戻り値は 2005-02-28 00:00:01.123456 です。 SELECT DATEADD(TIMESTAMP_NTZ '2005-02-28 00:00:00.123456', 1000, 'ff3'); -- 戻り値は 2005-02-28 00:00:00.124456 です。 SELECT DATEADD(TIMESTAMP '2005-02-28 00:00:00.123456', 1000, 'ff6'); -- MaxCompute 2.0 データ型エディションを有効にします。このコマンドは SQL 文と一緒に送信する必要があります。戻り値は 2005-03-18 00:00:00.0 です。 set odps.sql.type.system.odps2=true; SELECT DATEADD(TIMESTAMP '2005-02-18 00:00:00', 1, 'mm'); -- 現在の時刻が 2020-11-17 16:31:44 であると仮定します。戻り値は 2020-11-16 16:31:44 です。 SELECT DATEADD(GETDATE(), -1, 'dd'); -- NULL が返されます。 SELECT DATEADD(DATE '2005-02-18', 1, NULL);例 2: date パラメーターの型に関する説明
MaxCompute 2.0 データ型エディションでは、date パラメーターのデータ型が DATE、DATETIME、TIMESTAMP、または TIMESTAMP_NTZ でない場合、データ型を変換する必要があります。そうしないと、エラーが返されます。
SELECT DATEADD(CAST('2005-03-30 00:00:00' AS datetime), -1, 'mm'); -- 次の結果が返されます。 +------------+ | _c0 | +------------+ | 2005-02-28 00:00:00 | +------------+MaxCompute 1.0 データ型エディションでは、date パラメーターが
yyyy-mm-dd hh:mi:ssフォーマットの STRING の場合、暗黙的に DATETIME 型に変換されます。-- データ型エディションを 1.0 に設定します。 SET odps.sql.type.system.odps2=false; SET odps.sql.hive.compatible=false; -- 不正な例: 次の入力パラメーターは STRING 型ですが、DATETIME フォーマットに準拠していません。NULL が返されます。 SELECT DATEADD('2021-08-27',1,'dd'); -- 正しい例: 次の入力パラメーターは STRING 型で、DATETIME フォーマットに準拠しています。 SELECT DATEADD('2005-02-28 00:00:00', 1000000000, 'ff6'); -- 次の結果が返されます。 +------------+ | _c0 | +------------+ | 2005-02-28 00:16:40 | +------------+
関連関数
DATEADD は日付関数です。日付の計算と変換に関連する関数の詳細については、「日付関数」をご参照ください。