EXTRACT 関数 - Amazon Redshift

EXTRACT 関数

EXTRACT 関数は、TIMESTAMP、TIMESTAMPTZ、TIME、TIMETZ、 INTERVAL YEAR TO MONTH、または INTERVAL DAY TO SECOND の値から日付または時刻のパートを返します。例としては、タイムスタンプの日、月、年、時、分、秒、ミリ秒、マイクロ秒などがあります。

構文

EXTRACT(datepart FROM source)

引数

datepart

日、月、年、時、分、秒、ミリ秒、マイクロ秒など、抽出する日付または時刻のサブフィールド。有効な値については、「日付関数またはタイムスタンプ関数の日付部分」を参照してください。

source

評価結果が TIMESTAMP、TIMESTAMPTZ、TIME、TIMETZ、INTERVAL YEAR TO MONTH、または INTERVAL DAY TO SECOND のデータ型になる列または式。

戻り型

source 値が TIMESTAMP、TIME、TIMETZ、INTERVAL YEAR TO MONTH、または INTERVAL DAY TO SECOND のデータ型として評価される場合は INTEGER。

source 値がデータ型 TIMESTAMPTZ として評価される場合は、DOUBLE PRECISION。

TIMESTAMP の例

次の例では、支払価格が 10,000 USD 以上であった販売の週の数を判定します。この例では、TICKIT データを使用します。詳細については、「サンプルデータベース」を参照してください。

select salesid, extract(week from saletime) as weeknum from sales where pricepaid > 9999 order by 2; salesid | weeknum --------+--------- 159073 | 6 160318 | 8 161723 | 26

次の例では、リテラルタイムスタンプの値から分の値を返します。

select extract(minute from timestamp '2009-09-09 12:08:43'); date_part ----------- 8

次の例は、リテラルタイムスタンプ値からミリ秒の値を返します。

select extract(ms from timestamp '2009-09-09 12:08:43.101'); date_part ----------- 101

TIMESTAMPTZ の例

次の例は、リテラル timestamptz 値から年の値を返します。

select extract(year from timestamptz '1.12.1997 07:37:16.00 PST'); date_part ----------- 1997

TIME の例

次のテーブルの TIME_TEST の例には、3 つの値が挿入された列 TIME_VAL (タイプ TIME) があります。

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

次の例は、各 time_val から分を抽出します。

select extract(minute from time_val) as minutes from time_test; minutes ----------- 0 0 58

次の例は、各 time_val から時間を抽出します。

select extract(hour from time_val) as hours from time_test; hours ----------- 20 0 0

次の例では、リテラル値からミリ秒を抽出します。

select extract(ms from time '18:25:33.123456'); date_part ----------- 123

TIMETZ の例

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

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

次の例では、各 timetz_val から時間を抽出します。

select extract(hour from timetz_val) as hours from time_test; hours ----------- 4 0 5

次の例では、リテラル値からミリ秒を抽出します。抽出が処理される前には、リテラルは UTC に変換されません。

select extract(ms from timetz '18:25:33.123456 EST'); date_part ----------- 123

次の例は、リテラル timetz 値から、UTC からのタイムゾーンオフセット時を返します。

select extract(timezone_hour from timetz '1.12.1997 07:37:16.00 PDT'); date_part ----------- -7

INTERVAL YEAR TO MONTH と INTERVAL DAY TO SECOND の例

次の例では、36 時間 (1 日と 12 時間) を定義する INTERVAL DAY TO SECOND から日のパートである 1 を抽出します。

select EXTRACT('days' from INTERVAL '36 hours' DAY TO SECOND) date_part ------------------ 1

次の例では、15 か月 (1 年と 3 か月) を定義する YEAR TO MONTH から月のパートである 3 を抽出します。

select EXTRACT('month' from INTERVAL '15 months' YEAR TO MONTH) date_part ------------------ 3

次の例では、30 か月 (2 年と 6 か月) から月のパートである 6 を抽出します。

select EXTRACT('month' from INTERVAL '30' MONTH) date_part ------------------ 6

次の例では、50 時間 (2 日と 2 時間) から時間のパートである 2 を抽出します。

select EXTRACT('hours' from INTERVAL '50' HOUR) date_part ------------------ 2

次の例では、1 時間 11 分 11.123 秒から分のパートである 11 を抽出します。

select EXTRACT('minute' from INTERVAL '70 minutes 70.123 seconds' MINUTE TO SECOND) date_part ------------------ 11

次の例では、1 日 1 時間 1 分 1.11 秒から秒のパートである 1.11 を抽出します。

select EXTRACT('seconds' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) date_part ------------------ 1.11

次の例では、INTERVAL の合計時間数を抽出します。各パートが抽出され、合計に追加されます。

select EXTRACT('days' from INTERVAL '50' HOUR) * 24 + EXTRACT('hours' from INTERVAL '50' HOUR) ?column? ------------------ 50

次の例では、INTERVAL の合計秒数を抽出します。各パートが抽出され、合計に追加されます。

select EXTRACT('days' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 86400 + EXTRACT('hours' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 3600 + EXTRACT('minutes' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 60 + EXTRACT('seconds' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) ?column? ------------------ 90061.11