本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
DATEADD 函數
依指定的間隔遞增 DATE、TIMETZ、 TIME或 TIMESTAMP值。
語法
DATEADD( datepart, interval, {date|time|timetz|timestamp} )
引數
- datepart
-
函數對其執行的日期部分 (例如,年、月、日或小時)。如需詳細資訊,請參閱日期或時間戳記函數的日期部分。
- 間隔
-
指定要新增至目標表達式之間隔 (例如,天數) 的整數。負整數會減去間隔。
- date|time|timetz|timestamp
-
DATE、TIMETZ、 或 TIMETIMESTAMP資料欄,或隱含轉換為 DATE、TIME、 TIMETZ或 的表達式TIMESTAMP。DATE、TIME、 TIMETZ或 TIMESTAMP表達式必須包含指定的日期部分。
傳回類型
TIMESTAMP 或 TIME或 TIMETZ,取決於輸入資料類型。
具有資料DATE欄的範例
下列範例會將 30 天新增至DATE資料表中 11 月的每個日期。
select dateadd(day,30,caldate) as novplus30 from date where month='NOV' order by dateid; novplus30 --------------------- 2008-12-01 00:00:00 2008-12-02 00:00:00 2008-12-03 00:00:00 ... (30 rows)
下列範例會將 18 個月增加至常值日期值。
select dateadd(month,18,'2008-02-28'); date_add --------------------- 2009-08-28 00:00:00 (1 row)
DATEADD 函數的預設資料欄名稱為 DATE_ADD。日期值的預設時間戳記為 00:00:00
。
下列範例會將 30 分鐘增加至未指定時間戳記的日期值。
select dateadd(m,30,'2008-02-28'); date_add --------------------- 2008-02-28 00:30:00 (1 row)
您可以用全名或縮寫來表示日期部分。在這種情況下,m 代表分鐘,而不是月。
具有資料TIME欄的範例
下列範例資料表 TIME_TEST 具有插入三個值的資料欄 TIME_VAL (類型 TIME)。
select time_val from time_test; time_val --------------------- 20:00:00 00:00:00.5550 00:58:00
下列範例會將 5 分鐘新增至 TIME_VAL 資料表中的每個 TIME_TEST。
select dateadd(minute,5,time_val) as minplus5 from time_test; minplus5 --------------- 20:05:00 00:05:00.5550 01:03:00
下列範例會將 8 小時增加至常值時間值。
select dateadd(hour, 8, time '13:24:55'); date_add --------------- 21:24:55
下列範例會顯示時間超過 24:00:00 或在 00:00:00 以下的時間。
select dateadd(hour, 12, time '13:24:55'); date_add --------------- 01:24:55
具有資料TIMETZ欄的範例
這些範例中的輸出值是UTC其中的預設時區。
下列範例資料表 TIMETZ_TEST 具有插入三個值的資料欄 TIMETZ_VAL (類型 TIMETZ)。
select timetz_val from timetz_test; timetz_val ------------------ 04:00:00+00 00:00:00.5550+00 05:58:00+00
下列範例會將 5 分鐘新增至 TIMETZ_VAL 資料表中的每個 TIMETZ_TEST。
select dateadd(minute,5,timetz_val) as minplus5_tz from timetz_test; minplus5_tz --------------- 04:05:00+00 00:05:00.5550+00 06:03:00+00
下列範例會將 2 小時加入常值 timetz 值。
select dateadd(hour, 2, timetz '13:24:55 PST'); date_add --------------- 23:24:55+00
具有資料TIMESTAMP欄的範例
這些範例中的輸出值是UTC其中的預設時區。
下列範例資料表 TIMESTAMP_TEST 具有插入三個值的資料欄 TIMESTAMP_VAL (類型 TIMESTAMP)。
SELECT timestamp_val FROM timestamp_test; timestamp_val ------------------ 1988-05-15 10:23:31 2021-03-18 17:20:41 2023-06-02 18:11:12
下列範例只會將 20 年新增至 TIMESTAMP2VAL000 年之前 _ 中的 TIMESTAMP_TEST 值。
SELECT dateadd(year,20,timestamp_val) FROM timestamp_test WHERE timestamp_val < to_timestamp('2000-01-01 00:00:00', 'YYYY-MM-DD HH:MI:SS'); date_add --------------- 2008-05-15 10:23:31
下列範例將 5 秒加入不帶秒指示器的常值時間戳記值。
SELECT dateadd(second, 5, timestamp '2001-06-06'); date_add --------------- 2001-06-06 00:00:05
使用須知
DATEADD(月、...) 和 ADD_MONTHS 函數處理月底的日期不同:
-
ADD_MONTHS:如果您要新增的日期是當月的最後一天,則結果一律是結果當月的最後一天,無論當月長度為何。例如,4 月 30 號 + 1 個月是 5 月 31 號。
select add_months('2008-04-30',1); add_months --------------------- 2008-05-31 00:00:00 (1 row)
-
DATEADD:如果您要新增的 日期天數少於結果月份,則結果是結果月份的對應日期,而不是該月的最後一天。例如,4 月 30 號 + 1 個月是 5 月 30 號。
select dateadd(month,1,'2008-04-30'); date_add --------------------- 2008-05-30 00:00:00 (1 row)
使用 dateadd(月,12,...) 或 dateadd(年,1,...) 時,DATEADD函數處理閏年日期 02-29 的方式不同。
select dateadd(month,12,'2016-02-29'); date_add --------------------- 2017-02-28 00:00:00 select dateadd(year, 1, '2016-02-29'); date_add --------------------- 2017-03-01 00:00:00