間隔のデータ型とリテラル - Amazon Redshift

間隔のデータ型とリテラル

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

間隔データ型の構文

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

INTERVAL year_to_month_qualifier

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

INTERVAL day_to_second_qualifier [ (fractional_precision) ]

間隔リテラルの構文

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

INTERVAL quoted-string year_to_month_qualifier

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

INTERVAL quoted-string day_to_second_qualifier [ (fractional_precision) ]

引数

quoted-string

数量と日時単位を入力文字列として指定する正または負の数値を指定します。quoted-string に数値のみが含まれている場合、Amazon Redshift は year_to_month_qualifier または day_to_second_qualifier から単位を決定します。例えば、'23' MONTH1 year 11 months'-2' DAY-2 days 0 hours 0 minutes 0.0 seconds'1-2' MONTH1 year 2 months'13 day 1 hour 1 minute 1.123 seconds' SECOND13 days 1 hour 1 minute 1.123 seconds を表します。間隔の出力形式の詳細については、「間隔スタイル」を参照してください。

year_to_month_qualifier

間隔の範囲を指定します。修飾子を使用して、修飾子よりも小さい時間単位で間隔を作成すると、Amazon Redshift ではそれより小さい間隔の単位を切り捨てて破棄します。year_to_month_qualifier の有効な値は次のとおりです。

  • YEAR

  • MONTH

  • YEAR TO MONTH

day_to_second_qualifier

間隔の範囲を指定します。修飾子を使用して、修飾子よりも小さい時間単位で間隔を作成すると、Amazon Redshift ではそれより小さい間隔の単位を切り捨てて破棄します。day_to_second_qualifier の有効な値は次のとおりです。

  • 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_precision

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

セッション設定 interval_forbid_composite_literals は、YEAR TO MONTH と DAY TO SECOND の両方のパートを使用して間隔を指定している場合に、エラーを返すかどうかを決定します。詳細については、「interval_forbid_composite_literals」を参照してください。

区間演算

間隔の値を他の日時値と一緒に使用して算術演算を実行できます。次の表は、使用可能な演算と、各演算の結果であるデータ型を示しています。例えば、intervaldate に追加すると、YEAR TO MONTH 間隔の場合、結果は date になり、DAY TO SECOND 間隔の場合、結果はタイムスタンプになります。

日付 タイムスタンプ [間隔] 数値
[間隔] - 該当なし 該当なし [間隔] 該当なし
+ 日付 日付/タイムスタンプ [間隔] 該当なし
* 該当なし 該当なし 該当なし [間隔]
/ 該当なし 該当なし 該当なし [間隔]
日付 - 数値 [間隔] 日付/タイムスタンプ 日付
+ 該当なし 該当なし 該当なし 該当なし
タイムスタンプ - [間隔] [間隔] タイムスタンプ タイムスタンプ
+ 該当なし 該当なし 該当なし 該当なし

間隔スタイル

SQL SET コマンドを使用すると、間隔値の出力表示形式を変更できます。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_verbose 出力形式

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

'[@] <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_standard 出力形式

間隔値 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

間隔データ型の例

以下の例は、テーブルでの 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 -----+-----

間隔リテラルの例

以下の例は、間隔スタイルを 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

各単位の略語と複数形もサポートされています。例えば、5s5 second5 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