

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# DATEADD 函數
<a name="r_DATEADD_function"></a>

透過指定間隔來增量 DATE、TIME、TIMETZ 或 TIMESTAMP 值。

## 語法
<a name="r_DATEADD_function-synopsis"></a>

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

## 引數
<a name="r_DATEADD_function-arguments"></a>

 *datepart*   
函數對其執行的日期部分 (例如，年、月、日或小時)。如需詳細資訊，請參閱[日期或時間戳記函數的日期部分](r_Dateparts_for_datetime_functions.md)。

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

 *date*\$1*time*\$1*timetz*\$1*timestamp*  
DATE、TIME、TIMETZ 或 TIMESTAMP 欄或隱含轉換為 DATE、TIME、TIMETZ 或 TIMESTAMP 的運算式。DATE、TIME、TIMETZ 或 TIMESTAMP 運算式必須包含指定的日期部分。

## 傳回類型
<a name="r_DATEADD_function-return-type"></a>

TIMESTAMP 或 TIME 或 TIMETZ 取決於輸入資料類型。

## 具有 DATE 欄的範例
<a name="r_DATEADD_function-examples"></a>

下列範例會向 DATE 資料表中存在的 11 月份的每個日期增加 30 天。

```
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\$1ADD。日期值的預設時間戳記為 `00:00:00`。

下列範例會將 30 分鐘增加至未指定時間戳記的日期值。

```
select dateadd(m,30,'2008-02-28');

date_add
---------------------
2008-02-28 00:30:00
(1 row)
```

您可以用全名或縮寫來表示日期部分。在這種情況下，*m* 代表分鐘，而不是月。

## 具有 TIME 欄的範例
<a name="r_DATEADD_function-examples-time"></a>

下列範例資料表 TIME\$1TEST 有一個 TIME\$1VAL 欄 (類型為 TIME)，其中插入了三個值。

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

下列範例會將 5 分鐘增加至 TIME\$1TEST 資料表中的每個 TIME\$1VAL。

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

## 具有 TIMTZ 欄的範例
<a name="r_DATEADD_function-examples-timetz"></a>

這些範例中的輸出值是以 UTC 為預設時區。

下列範例資料表 TIMETZ\$1TEST 有一個 TIMETZ\$1VAL 欄 (類型為 TIMETZ)，其中插入了三個值。

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

下列範例會將 5 分鐘增加至 TIMETZ\$1TEST 資料表中的每個 TIMETZ\$1VAL。

```
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 欄的範例
<a name="r_DATEADD_function-examples-timestamp"></a>

這些範例中的輸出值是以 UTC 為預設時區。

下列範例資料表 TIMESTAMP\$1TEST 有一個 TIMESTAMP\$1VAL 欄 (類型為 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 年增加至 2000 年之前的 TIMESTAMP\$1TEST 中的 TIMESTAMP\$1VAL 值。

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

## 使用須知
<a name="r_DATEADD_usage_notes"></a>

 DATEADD(month, ...) 和 ADD\$1MONTHS 函數處理落在月底之日期的方式會所有不同：
+ ADD\$1MONTHS：如果您要新增的日期是某個月的最後一天，則產生的月份總是產生月份的最後一天，不論該月份的長短。例如，4 月 30 號 \$1 1 個月是 5 月 31 號。

  ```
  select add_months('2008-04-30',1);
  
  add_months
  ---------------------
  2008-05-31 00:00:00
  (1 row)
  ```
+ DATEADD：如果您要新增之日期中的天數少於結果月份，則結果將會是結果月份的相對應天數，而不會是該月的最後一天。例如，4 月 30 號 \$1 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
```