

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の 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)」を参照してください。

 *interval*   
ターゲット式に追加する間隔 ( 日数など ) を指定する整数。負の整数は間隔を減算します。

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

DATEDIFF 関数のデフォルトの列名は 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 の例には、3 つの値が挿入された列 TIME\$1VAL (タイプ TIME) があります。

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

次の例では、TIME\$1TEST テーブルの各 TIME\$1VAL に 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
```

## TIMETZ 列の例
<a name="r_DATEADD_function-examples-timetz"></a>

これらの例の出力値は、デフォルトのタイムゾーンである UTC です。

次のテーブルの TIMETZ\$1TEST の例には、3 つの値が挿入された列 TIMETZ\$1VAL (タイプ TIMETZ) があります。

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

次の例では、TIMETZ\$1TEST テーブルの各 TIMETZ\$1VAL に 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
```

次の例では、リテラルの timetz 値に 2 時間を追加します。

```
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 の例には、3 つの値が挿入された列 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
```

次の例では、2000 年より前の TIMESTAMP\$1TEST の TIMESTAMP\$1VAL 値にのみ 20 年を加算しています。

```
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(month, 12,…) または dateadd(year, 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
```