

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

# EXTRACT 関数
<a name="r_EXTRACT_function"></a>

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

## 構文
<a name="r_EXTRACT_function-synopsis"></a>

```
EXTRACT(datepart FROM source)
```

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

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

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

## 戻り型
<a name="r_EXTRACT_function-return-type"></a>

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

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

## TIMESTAMP の例
<a name="r_EXTRACT_function-examples"></a>

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

```
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 の例
<a name="r_EXTRACT_function-examples-timestamptz"></a>

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

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

## TIME の例
<a name="r_EXTRACT_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\$1val から分を抽出します。

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

次の例は、各 time\$1val から時間を抽出します。

```
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 の例
<a name="r_EXTRACT_function-examples-timetz"></a>

次のテーブルの 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\$1val から時間を抽出します。

```
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 の例
<a name="r_EXTRACT_function-examples-interval"></a>

次の例では、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
```