DATEADD 函數 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

DATEADD 函數

透過指定間隔來增量日期、時間、TIMETZ 或時間戳記值。

Syntax (語法)

DATEADD( datepart, interval, {date|time|timetz|timestamp} )

引數

datepart

函數對其執行的日期部分 (例如,年、月、日或小時)。如需詳細資訊,請參閱 日期或時間戳函數的日期部分

間隔

指定要新增至目標表達式之間隔 (例如,天數) 的整數。負整數會減去間隔。

日期|時間|時間|時間戳

日期、時間、TIMEZ 或 TIMESTAMP 欄或表達式會隱性轉換為日期、時間、TIMEZ 或 TIMESTAMP。日期、時間、TIMETZ 或 TIMESTAMP 表達式必須包含指定的日期部分。

傳回類型

時間戳或時間或 TIMETZ,具體取決於輸入數據類型。

具有 DATE 列的示例

下列範例會將 30 天新增至 DATE 資料表中存在之十一月的每個日期。

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_VAL(類型時間),其中插入了三個值。

select time_val from time_test; time_val --------------------- 20:00:00 00:00:00.5550 00:58:00

以下示例為時間測試表中的每個 TIME_VAL 添加 5 分鐘。

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

具有時間 TEMZ 列的示例

這些示例中的輸出值採用 UTC,這是默認時區。

下面的示例表具有一列時間 Z_VAL(類型為時間 TIMEZ),其中插入了三個值。

select timetz_val from timetz_test; timetz_val ------------------ 04:00:00+00 00:00:00.5550+00 05:58:00+00

以下示例為時間測試表中的每個時間 Z_VAL 添加 5 分鐘。

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

以下示例為文字時間 z 值添加 2 小時。

select dateadd(hour, 2, timetz '13:24:55 PST'); date_add --------------- 23:24:55+00

使用須知

DATEADD (月、...) 和 ADD_MONTHS 函數處理落在月底的日期有所不同:

  • 添加月份:如果您要新增的日期是某個月的最後一天,則產生的月份總是產生月份的最後一天,不論該月份的長短。例如,4 月 30 號 + 1 個月是 5 月 31 號。

    select add_months('2008-04-30',1); add_months --------------------- 2008-05-31 00:00:00 (1 row)
  • 日期添加:如果您要新增之日期中的天數少於結果月份,則結果是結果月份的相對應天數,而不會是該月的最後一天。例如,4 月 30 號 + 1 個月是 5 月 30 號。

    select dateadd(month,1,'2008-04-30'); date_add --------------------- 2008-05-30 00:00:00 (1 row)

DATEADD 函數使用 dateadd (月份,12…) 或 dateadd (年份,1…) 時,處理閏年日期 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