

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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

日時データ型には、DATE、TIME、TIMESTAMP\$1LTZ、TIMESTAMP\$1NTZ などがあります。

**Topics**
+ [DATE](Datetime_types-date.md)
+ [TIMESTAMP\$1LTZ](Datetime_types-timestamp_LTZ.md)
+ [TIMESTAMP\$1NTZ](Datetime_types-TIMESTAMP_NTZ.md)
+ [日時型を使用する例](Examples_with_datetime_types.md)
+ [日付、時刻、およびタイムスタンプのリテラル](Date_and_time_literals.md)
+ [間隔リテラル](Interval_literals.md)
+ [間隔のデータ型とリテラル](interval_data_types_spark.md)

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

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/clean-rooms/latest/sql-reference/Datetime_types-date.html)

# TIMESTAMP\$1LTZ
<a name="Datetime_types-timestamp_LTZ"></a>

TIMESTAMP\$1LTZ データ型を使用して、日付、時刻、ローカルタイムゾーンを含む完全なタイムスタンプ値を保存します。

TIMESTAMP は、セッションローカルタイムゾーンを持つフィールド `year`、`month`、`day`、`second`、、`hour``minute`および の値で構成される値を表します。`timestamp` 値は絶対時点を表します。

Spark の TIMESTAMP は、TIMESTAMP\$1LTZ および TIMESTAMP\$1NTZ バリエーションのいずれかに関連付けられたユーザー指定のエイリアスです。デフォルトのタイムスタンプタイプは、設定 を介して TIMESTAMP\$1LTZ (デフォルト値) または TIMESTAMP\$1NTZ として設定できます`spark.sql.timestampType`。

# TIMESTAMP\$1NTZ
<a name="Datetime_types-TIMESTAMP_NTZ"></a>

TIMESTAMP\$1NTZ データ型を使用して、日付、時刻を含む完全なタイムスタンプ値をローカルタイムゾーンなしで保存します。

TIMESTAMP は、フィールド `year`、、`month`、`day`、`minute`、および `hour`の値で構成される値を表します`second`。すべてのオペレーションは、タイムゾーンを考慮せずに実行されます。

Spark の TIMESTAMP は、TIMESTAMP\$1LTZ および TIMESTAMP\$1NTZ バリエーションのいずれかに関連付けられたユーザー指定のエイリアスです。デフォルトのタイムスタンプタイプは、設定 を介して TIMESTAMP\$1LTZ (デフォルト値) または TIMESTAMP\$1NTZ として設定できます`spark.sql.timestampType`。

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

以下の例は、 AWS Clean Roomsでサポートされている日時型の使用方法を示しています。

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

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

```
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="Examples_with_datetime_types-time-examples"></a>

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

```
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="Date_and_time_literals"></a>

以下は、 AWS Clean Rooms Spark SQL でサポートされている日付、時刻、タイムスタンプリテラルを操作するためのルールです。

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

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

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/clean-rooms/latest/sql-reference/Date_and_time_literals.html)

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

次の表は、 AWS Clean Rooms テーブルにロードできるリテラル時間値の有効な例である入力時間を示しています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/clean-rooms/latest/sql-reference/Date_and_time_literals.html)

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

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/clean-rooms/latest/sql-reference/Date_and_time_literals.html)

次の例は、 `now`と が DATE\$1ADD 関数`today`を操作する方法を示しています。

```
select date_add('today', 1);

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

select date_add('now', 1);

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

# 間隔リテラル
<a name="Interval_literals"></a>

以下は、Spark SQL で AWS Clean Rooms サポートされている間隔リテラルを操作するためのルールです。

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

**注記**  
 AWS Clean Rooms テーブルの列に INTERVAL データ型を使用することはできません。

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

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

## 例
<a name="section_interval-literals-examples"></a>

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

以下の例は、指定された日付に 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 年 3 月 31 日から 4 か月を引いて、結果が 2022 年 11 月 30 日になります。計算では、1 か月の日数を考慮します。

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

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



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

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

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

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

```
INTERVAL year_to_month_qualifier
```

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

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

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

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

```
INTERVAL quoted-string year_to_month_qualifier
```

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

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

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

 quoted-string**   
数量と日時単位を入力文字列として指定する正または負の数値を指定します。*quoted-string* に数値のみが含まれている場合 AWS Clean Rooms 、 は *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` を表します。間隔の出力形式の詳細については、「[間隔スタイル](#interval_data_types-interval-styles)」を参照してください。

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

 day\$1to\$1second\$1qualifier**   
間隔の範囲を指定します。修飾子を使用して、修飾子より小さい時間単位の間隔を作成すると、 は間隔の小さい部分 AWS Clean Rooms を切り捨てて破棄します。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 修飾子を使用する場合、 AWS Clean Rooms は 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 の両方のパートを使用して間隔を指定している場合に、エラーを返すかどうかを決定します。

## 区間演算
<a name="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/clean-rooms/latest/sql-reference/interval_data_types_spark.html)

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/clean-rooms/latest/sql-reference/interval_data_types_spark.html)

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/clean-rooms/latest/sql-reference/interval_data_types_spark.html)

## 間隔スタイル
<a name="interval_data_types-interval-styles"></a>
+ `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="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="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
```

精度を指定しない場合、 は最大精度 6 AWS Clean Rooms を使用します。

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

修飾子は、指定する単位を指定します。たとえば、次の例では、前の例と同じ「2:2」の*引用符で囲まれた文字列*を使用していますが、 AWS Clean Rooms は修飾子のために異なる時間単位を使用していることを認識します。

```
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="interval_literals_examples"></a>

**注記**  
以下の例は、`YEAR TO MONTH` または `DAY TO SECOND` 修飾子を使用しない間隔リテラルを示しています。修飾子を使用した間隔リテラルの推奨例については、「[間隔のデータ型とリテラル](interval_data_types_spark.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
```