

 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/)を参照してください。

# 日時型
<a name="r_Datetime_types"></a>

**Topics**
+ [

## ストレージと範囲
](#r_Datetime_types-storage-and-ranges)
+ [

## DATE
](#r_Datetime_types-date)
+ [

## TIME
](#r_Datetime_types-time)
+ [

## TIMETZ
](#r_Datetime_types-timetz)
+ [

## TIMESTAMP
](#r_Datetime_types-timestamp)
+ [

## TIMESTAMPTZ
](#r_Datetime_types-timestamptz)
+ [

# 日時型を使用する例
](r_Examples_with_datetime_types.md)
+ [

# 日付、時刻、およびタイムスタンプのリテラル
](r_Date_and_time_literals.md)
+ [

# 間隔のデータ型とリテラル
](r_interval_data_types.md)

日時データ型には DATE、TIME、TIMETZ、TIMESTAMP、TIMESTAMPTZ があります。

## ストレージと範囲
<a name="r_Datetime_types-storage-and-ranges"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Datetime_types.html)

## DATE
<a name="r_Datetime_types-date"></a>

タイムスタンプなしで単純にカレンダー日付だけを保存するには DATE データ型を使用します。

## TIME
<a name="r_Datetime_types-time"></a>

TIME は、TIME WITHOUT TIME ZONE のエイリアスです。

時刻を保存するには、TIME データ型を使用します。

TIME 列に値を保存する場合、小数秒の精度については最大で 6 桁まで保存されます。

デフォルトでは、ユーザーテーブルと Amazon Redshift システムテーブルでは、TIME 値は協定世界時 (UTC) になります。

## TIMETZ
<a name="r_Datetime_types-timetz"></a>

TIMETZ は、TIME WITH TIME ZONE のエイリアスです。

TIMETZ データ型を使用して、時刻とタイムゾーンを保存します。

TIMETZ 列に値を保存する場合、小数秒の精度については最大で 6 桁まで保存されます。

デフォルトでは、ユーザーテーブルと Amazon Redshift システムテーブルの両方で、TIMETZ 値は UTC です。

## TIMESTAMP
<a name="r_Datetime_types-timestamp"></a>

TIMESTAMP は、TIMESTAMP WITHOUT TIME ZONE のエイリアスです。

日付と時刻を含む完全なタイムスタンプ値を保存するには TIMESTAMP データ型を使用します。

TIMESTAMP 列に値を保存する場合、小数秒の精度については最大で 6 桁まで保存されます。

TIMESTAMP 列に日付または部分的なタイムスタンプ値を持つ日付を挿入すると、値は暗黙的に完全なタイムスタンプ値に変換されます。この完全なタイムスタンプ値には、時間、分、および秒が抜けている場合のデフォルト値 (00) があります。入力文字列のタイムゾーン値は無視されます。

デフォルトでは、ユーザーテーブルと Amazon Redshift システムテーブルの両方で、TIMESTAMP 値は UTC です。

## TIMESTAMPTZ
<a name="r_Datetime_types-timestamptz"></a>

TIMESTAMPTZ は、TIMESTAMP WITH TIME ZONE のエイリアスです。

日付、時刻、タイムゾーンを含む完全なタイムスタンプ値を入力するには TIMESTAMPTZ データ型を使用します。入力値にタイムゾーンが含まれる場合、Amazon Redshift はタイムゾーンを使用して値を UTC に変換し、UTC 値を保存します。

サポートされるタイムゾーン名のリストを表示するには、次のコマンドを実行します。

```
select pg_timezone_names();
```

 サポートされるタイムゾーン省略形のリストを表示するには、次のコマンドを実行します。

```
select pg_timezone_abbrevs();
```

タイムゾーンの最新情報については、「[IANA Time Zone Database](https://www.iana.org/time-zones)」も参照してください。

次の表に、タイムゾーン形式の例を示します。


| 形式 | 例 | 
| --- | --- | 
|  dd mon hh:mi:ss yyyy tz  |  17 Dec 07:37:16 1997 PST   | 
|  mm/dd/yyyy hh:mi:ss.ss tz  |  12/17/1997 07:37:16.00 PST  | 
|  mm/dd/yyyy hh:mi:ss.ss tz  |  12/17/1997 07:37:16.00 US/Pacific  | 
|  yyyy-mm-dd hh:mi:ss\$1/-tz  |  1997-12-17 07:37:16-08   | 
| dd.mm.yyyy hh:mi:ss tz |  17.12.1997 07:37:16.00 PST  | 

TIMESTAMPTZ 列に値を保存する場合、小数秒の精度については最大で 6 桁まで保存されます。

TIMESTAMPTZ 列に日付または部分的なタイムスタンプを持つ日付を挿入すると、値は暗黙的に完全なタイムスタンプ値に変換されます。この完全なタイムスタンプ値には、時間、分、および秒が抜けている場合のデフォルト値 (00) があります。

TIMESTAMPTZ 値は、ユーザーテーブルでは UTC です。

# 日時型を使用する例
<a name="r_Examples_with_datetime_types"></a>

以下に、Amazon Redshift でサポートされている日時タイプを操作する例を示します。

## 日付の例
<a name="r_Examples_with_datetime_types-date-examples"></a>

次の例では、形式が異なる複数の日付を挿入して、出力を表示します。

```
create table datetable (start_date date, end_date date);
```

```
insert into datetable values ('2008-06-01','2008-12-31');

insert into datetable values ('Jun 1,2008','20081231');
```

```
select * from datetable order by 1;

start_date |  end_date
-----------------------
2008-06-01 | 2008-12-31
2008-06-01 | 2008-12-31
```

DATE 列にタイムスタンプ値を挿入した場合、時刻部分が無視され、日付のみロードされます。

## 時間の例
<a name="r_Examples_with_datetime_types-time-examples"></a>

次の例では、形式の異なる複数の TIME および TIMETZ 値を挿入して、出力を表示します。

```
create table timetable (start_time time, end_time timetz);
```

```
insert into timetable values ('19:11:19','20:41:19 UTC');
insert into timetable values ('191119', '204119 UTC');
```

```
select * from timetable order by 1;
start_time |  end_time
------------------------
 19:11:19  | 20:41:19+00
 19:11:19  | 20:41:19+00
```

## タイムスタンプの例
<a name="r_Examples_with_datetime_types-timestamp-examples"></a>

日付を TIMESTAMP 列または TIMESTAMPTZ 列に挿入すると、時刻はデフォルトでは午前 0 時になります。例えば、リテラル `20081231` を挿入すると、格納される値は `2008-12-31 00:00:00` です。

現在のセッションのタイムゾーンを変更するには、[SET](r_SET.md) コマンドを使用して [timezone](r_timezone_config.md) 設定パラメータを設定します。

次の例では、形式の異なる複数のタイムスタンプを挿入して、結果のテーブルを表示します。

```
create table tstamp(timeofday timestamp, timeofdaytz timestamptz);

insert into tstamp values('Jun 1,2008  09:59:59', 'Jun 1,2008 09:59:59 EST' );
insert into tstamp values('Dec 31,2008 18:20','Dec 31,2008 18:20');
insert into tstamp values('Jun 1,2008  09:59:59 EST', 'Jun 1,2008 09:59:59');

SELECT * FROM tstamp;

+---------------------+------------------------+
|      timeofday      |      timeofdaytz       |
+---------------------+------------------------+
| 2008-06-01 09:59:59 | 2008-06-01 14:59:59+00 |
| 2008-12-31 18:20:00 | 2008-12-31 18:20:00+00 |
| 2008-06-01 09:59:59 | 2008-06-01 09:59:59+00 |
+---------------------+------------------------+
```

# 日付、時刻、およびタイムスタンプのリテラル
<a name="r_Date_and_time_literals"></a>

Amazon Redshift によってサポートされている日付、時刻、およびタイムスタンプリテラルを使用する際に従うべきルールは次のとおりです。

## 日付
<a name="r_Date_and_time_literals-dates"></a>

次に示す入力日付はすべて、Amazon Redshift テーブルにロードできる DATE データ型の有効な日付リテラル値の例です。デフォルトの `MDY DateStyle` モードが有効であると想定されます。このモードでは、`1999-01-08` や `01/02/00` などの文字列で月の値が日の値より前にあることを意味します。

**注記**  
日付またはタイムスタンプのリテラルをテーブルにロードするには、それらのリテラルを引用符で囲む必要があります。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Date_and_time_literals.html)

## Times
<a name="r_Date_and_time_literals-times"></a>

次に示す入力時間はすべて、Amazon Redshift テーブルにロードできる TIME データ型および TIMETZ データ型の有効な時刻リテラル値の例です。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Date_and_time_literals.html)

## タイムスタンプ
<a name="r_Date_and_time_literals-timestamps"></a>

次に示す入力タイムスタンプはすべて、Amazon Redshift テーブルにロードできる TIMESTAMP データ型および TIMESTAMPTZ データ型の有効な時刻リテラル値の例です。有効な日付リテラルはすべて、以下の時刻リテラルと結合することができます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Date_and_time_literals.html)

## 特殊な日時値
<a name="r_Date_and_time_literals-special-datetime-values"></a>

次に示す特殊な値は、日時リテラルとして、および日付関数に渡す引数として使用できます。このような特殊な値は、一重引用符を必要とし、クエリの処理時に正規のタイムスタンプ値に変換されます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Date_and_time_literals.html)

次の例では、`now` および `today` が DATEADD 関数でどのように動作するかを示しています。

```
select dateadd(day,1,'today');

date_add
---------------------
2009-11-17 00:00:00
(1 row)

select dateadd(day,1,'now');

date_add
----------------------------
2009-11-17 10:45:32.021394
(1 row)
```

# 間隔のデータ型とリテラル
<a name="r_interval_data_types"></a>

間隔のデータ型を使用して、`seconds`、`minutes`、`hours`、`days`、`months`、`years` などの単位で期間を保存できます。間隔のデータ型とリテラルは、日付とタイムスタンプへの間隔の追加、間隔の合計、日付またはタイムスタンプからの間隔の減算など、日時の計算に使用できます。間隔リテラルは、テーブル内の間隔データ型列への入力値として使用できます。

## 間隔データ型の構文
<a name="r_interval_data_types-syntax"></a>

期間を年数と月数で保存する間隔データ型を指定するには:

```
INTERVAL year_to_month_qualifier
```

期間を日数、時間数、分数、および秒数で保存する間隔データ型を指定するには:

```
INTERVAL day_to_second_qualifier [ (fractional_precision) ]
```

## 間隔リテラルの構文
<a name="r_interval_data_types-syntax-literal"></a>

間隔リテラルを指定して、期間を年数と月数で定義するには:

```
INTERVAL quoted-string year_to_month_qualifier
```

間隔リテラルを指定して、期間を日数、時間数、分数、および秒数で定義するには:

```
INTERVAL quoted-string day_to_second_qualifier [ (fractional_precision) ]
```

## 引数
<a name="r_interval_data_types-arguments"></a>

 *quoted-string*   
数量と日時単位を入力文字列として指定する正または負の数値を指定します。quoted-string に数値のみが含まれている場合、Amazon Redshift は year\$1to\$1month\$1qualifier または day\$1to\$1second\$1qualifier から単位を決定します。******例えば、`'23' MONTH` は `1 year 11 months`、`'-2' DAY` は `-2 days 0 hours 0 minutes 0.0 seconds`、`'1-2' MONTH` は `1 year 2 months`、`'13 day 1 hour 1 minute 1.123 seconds' SECOND` は `13 days 1 hour 1 minute 1.123 seconds` を表します。間隔の出力形式の詳細については、「[間隔スタイル](#r_interval_data_types-interval-styles)」を参照してください。

 *year\$1to\$1month\$1qualifier*   
間隔の範囲を指定します。修飾子を使用して、修飾子よりも小さい時間単位で間隔を作成すると、Amazon Redshift ではそれより小さい間隔の単位を切り捨てて破棄します。year\$1to\$1month\$1qualifier の有効な値は次のとおりです。**  
+ `YEAR`
+ `MONTH`
+ `YEAR TO MONTH`

 *day\$1to\$1second\$1qualifier*   
間隔の範囲を指定します。修飾子を使用して、修飾子よりも小さい時間単位で間隔を作成すると、Amazon Redshift ではそれより小さい間隔の単位を切り捨てて破棄します。day\$1to\$1second\$1qualifier の有効な値は次のとおりです。**  
+ `DAY`
+ `HOUR`
+ `MINUTE`
+ `SECOND`
+ `DAY TO HOUR`
+ `DAY TO MINUTE`
+ `DAY TO SECOND`
+ `HOUR TO MINUTE`
+ `HOUR TO SECOND`
+ `MINUTE TO SECOND`
INTERVAL リテラルの出力は、指定された最小の INTERVAL コンポーネントで切り捨てられます。例えば、MINUTE 修飾子を使用すると、Amazon Redshift は MINUTE より小さい時間単位を破棄します。  

```
select INTERVAL '1 day 1 hour 1 minute 1.123 seconds' MINUTE
```
結果の値は `'1 day 01:01:00'` で切り捨てられます。

 *Fractional\$1precision*   
間隔で使用できる小数点以下の桁数を指定するオプションのパラメータ。fractional\$1precision 引数は、間隔に SECOND が含まれている場合にのみ指定する必要があります。**例えば、`SECOND(3)` は、1.234 秒など、小数点以下 3 桁のみを許可する間隔を作成します。小数点以下の最大桁数は 6 です。

セッション設定 `interval_forbid_composite_literals` は、YEAR TO MONTH と DAY TO SECOND の両方のパートを使用して間隔を指定している場合に、エラーを返すかどうかを決定します。詳細については、「[interval\$1forbid\$1composite\$1literals](r_interval_forbid_composite_literals.md)」を参照してください。

## 区間演算
<a name="r_interval_data_types-arithmetic"></a>

間隔の値を他の日時値と一緒に使用して算術演算を実行できます。次の表は、使用可能な演算と、各演算の結果であるデータ型を示しています。

**注記**  
 `date` と `timestamp` の両方の結果を生成できる演算は、式に関連する最小時間単位に基づいて行われます。例えば、`interval` を `date` に追加すると、YEAR TO MONTH 間隔の場合、結果は `date` になり、DAY TO SECOND 間隔の場合、結果はタイムスタンプになります。

最初のオペランドが `interval` の演算は、指定された 2 番目のオペランドに対して次の結果を生成します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_interval_data_types.html)

最初のオペランドが `date` の演算は、指定された 2 番目のオペランドに対して次の結果を生成します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_interval_data_types.html)

最初のオペランドが `timestamp` の演算は、指定された 2 番目のオペランドに対して次の結果を生成します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_interval_data_types.html)

## 間隔スタイル
<a name="r_interval_data_types-interval-styles"></a>

SQL [SET](r_SET.md) コマンドを使用すると、間隔値の出力表示形式を変更できます。SQL で間隔データ型を使用する場合は、テキストにキャストして、予想される間隔スタイル (`YEAR TO MONTH::text` など) を確認します。`IntervalStyle` 値を設定するために使用できる値は、次のとおりです。
+ `postgres` — PostgreSQL スタイルに従います。これがデフォルトです。
+ `postgres_verbose` — PostgreSQL の詳細スタイルに従います。
+ `sql_standard` — SQL 標準間隔リテラルスタイルに従います。

次のコマンドは、間隔スタイルを `sql_standard` に設定します。

```
SET IntervalStyle to 'sql_standard';
```

**postgres 出力形式**

`postgres` 間隔スタイルの出力形式は、次のとおりです。各数値は負の値にすることができます。

```
'<numeric> <unit> [, <numeric> <unit> ...]'
```

```
select INTERVAL '1-2' YEAR TO MONTH::text 

varchar
---------------
1 year 2 mons
```

```
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text

varchar
------------------
1 day 02:03:04.5678
```

**postgres\$1verbose 出力形式**

postgres\$1verbose 構文は postgres と似ていますが、postgres\$1verbose 出力には時間の単位も含まれています。

```
'[@] <numeric> <unit> [, <numeric> <unit> ...] [direction]'
```

```
select INTERVAL '1-2' YEAR TO MONTH::text 

varchar
-----------------
@ 1 year 2 mons
```

```
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text

varchar
---------------------------
@ 1 day 2 hours 3 mins 4.56 secs
```

**sql\$1standard 出力形式**

間隔値 year to month は次のようにフォーマットされます。間隔の前にマイナス記号を指定すると、間隔が負の値になり、間隔全体に適用されます。

```
'[-]yy-mm'
```

間隔値 day to second は次のようにフォーマットされます。

```
'[-]dd hh:mm:ss.ffffff'
```

```
SELECT INTERVAL '1-2' YEAR TO MONTH::text 
  
varchar   
-------
1-2
```

```
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text 

varchar
---------------
1 2:03:04.5678
```

## 間隔データ型の例
<a name="r_interval_data_types-examples"></a>

以下の例は、テーブルでの INTERVAL データ型の使用方法を示しています。

```
create table sample_intervals (y2m interval month, h2m interval hour to minute);
insert into sample_intervals values (interval '20' month, interval '2 days 1:1:1.123456' day to second);
select y2m::text, h2m::text from sample_intervals;


      y2m      |       h2m      
---------------+-----------------
 1 year 8 mons | 2 days 01:01:00
```

```
update sample_intervals set y2m = interval '2' year where y2m = interval '1-8' year to month;
select * from sample_intervals;

   y2m   |       h2m       
---------+-----------------
 2 years | 2 days 01:01:00
```

```
delete from sample_intervals where h2m = interval '2 1:1:0' day to second;
select * from sample_intervals;

 y2m | h2m 
-----+-----
```

## 間隔リテラルの例
<a name="r_interval_data_types_literals-examples"></a>

以下の例は、間隔スタイルを `postgres` に設定して実行します。

次の例は、1 年の INTERVAL リテラルを作成する方法を示しています。

```
select INTERVAL '1' YEAR 

intervaly2m
---------------
1 years 0 mons
```

修飾子を超える quoted-string を指定すると、残りの時間単位が間隔から切り捨てられます。**次の例では、13 か月の間隔は 1 年と 1 か月になりますが、YEAR 修飾子により残りの 1 か月が除外されます。

```
select INTERVAL '13 months' YEAR

intervaly2m
---------------
1 years 0 mons
```

間隔文字列を下回る修飾子を使用すると、残った単位が含まれます。

```
select INTERVAL '13 months' MONTH

intervaly2m
---------------
1 years 1 mons
```

間隔で精度を指定すると、小数桁数が指定された精度まで切り捨てられます。

```
select INTERVAL '1.234567' SECOND (3)

intervald2s
--------------------------------
0 days 0 hours 0 mins 1.235 secs
```

精度を指定しない場合は、Amazon Redshift では最大精度 6 が使用されます。

```
select INTERVAL '1.23456789' SECOND

intervald2s
-----------------------------------
0 days 0 hours 0 mins 1.234567 secs
```

次の例では、範囲指定した間隔を作成する方法を示します。

```
select INTERVAL '2:2' MINUTE TO SECOND

intervald2s
------------------------------
0 days 0 hours 2 mins 2.0 secs
```

修飾子は、指定する単位を指定します。例えば、次の例では前の例と同じ quoted-string (2:2) を使用していますが、Amazon Redshift では、修飾子に基づいて異なる時間単位を使用していると認識します。**

```
select INTERVAL '2:2' HOUR TO MINUTE

intervald2s
------------------------------
0 days 2 hours 2 mins 0.0 secs
```

各単位の略語と複数形もサポートされています。例えば、`5s`、`5 second`、`5 seconds` は同じ間隔です。サポートされている単位は、年、月、日、時間、分、秒です。

```
select INTERVAL '5s' SECOND

intervald2s
------------------------------
0 days 0 hours 0 mins 5.0 secs
```

```
select INTERVAL '5 HOURS' HOUR

intervald2s
------------------------------
0 days 5 hours 0 mins 0.0 secs
```

```
select INTERVAL '5 h' HOUR

intervald2s
------------------------------
0 days 5 hours 0 mins 0.0 secs
```

# 修飾子構文を使用しない間隔リテラルの例
<a name="r_interval_literals"></a>

**注記**  
以下の例は、`YEAR TO MONTH` または `DAY TO SECOND` 修飾子を使用しない間隔リテラルを示しています。修飾子を使用した間隔リテラルの推奨例については、「[間隔のデータ型とリテラル](r_interval_data_types.md)」を参照してください。

`12 hours` または `6 months` など、特定の期間を識別するには、間隔リテラルを使用します。これらの間隔リテラルは、日時式を必要とする条件および計算の中で使用できます。

 間隔リテラルは、INTERVAL キーワードに数量およびサポートされている日付パートを組み合わせて表現します。例えば、`INTERVAL '7 days'` または `INTERVAL '59 minutes'` のようになります。複数の数量および単位をつなぎ合わせることで、より正確な間隔を作成できます (例えば、`INTERVAL '7 days, 3 hours, 59 minutes'`)。各単位の省略形および複数形もサポートされています。例えば、`5 s`、`5 second`、および `5 seconds` は等価な間隔です。

日付部分を指定しない場合、間隔値は秒数を示します。数量値は小数として指定できます (例えば、`0.5 days`)。

次の例に、さまざまな間隔値を使用した一連の計算を示します。

以下は、指定された日付に 1 秒を追加します。

```
select caldate + interval '1 second' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2008-12-31 00:00:01
(1 row)
```

以下は、指定された日付に 1 分を追加します。

```
select caldate + interval '1 minute' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2008-12-31 00:01:00
(1 row)
```

以下では、指定された日付に 3 時間と 35 分を追加します。

```
select caldate + interval '3 hours, 35 minutes' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2008-12-31 03:35:00
(1 row)
```

以下は、指定された日付に 52 週を追加します。

```
select caldate + interval '52 weeks' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2009-12-30 00:00:00
(1 row)
```

以下では、指定された日付に 1 週、1 時間、1 分、および 1 秒を追加します。

```
select caldate + interval '1w, 1h, 1m, 1s' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2009-01-07 01:01:01
(1 row)
```

以下は、指定された日付に 12 時間 (半日) を追加します。

```
select caldate + interval '0.5 days' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2008-12-31 12:00:00
(1 row)
```

以下では、2023 年 2 月 15 日から 4 か月を引いて、結果が 2022 年 10 月 15 日になります。

```
select date '2023-02-15' - interval '4 months';

?column?
---------------------
2022-10-15 00:00:00
```

以下では、2023 年 3 月 31 日から 4 か月を引いて、結果が 2022 年 11 月 30 日になります。計算では、1 か月の日数を考慮します。

```
select date '2023-03-31' - interval '4 months';

?column?
---------------------
2022-11-30 00:00:00
```