

 Amazon Redshift non supporterà più la creazione di nuovi Python UDFs a partire dalla Patch 198. Python esistente UDFs continuerà a funzionare fino al 30 giugno 2026. Per ulteriori informazioni, consulta il [post del blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Funzione EXTRACT
<a name="r_EXTRACT_function"></a>

La funzione EXTRACT restituisce una parte di data o di ora da un valore TIMESTAMP, TIMESTAMPTZ, TIME, TIMETZ, INTERVAL YEAR TO MONTH o INTERVAL DAY TO SECOND. Gli esempi includono un giorno, mese, ora, minuto, secondo, millisecondo o microsecondo da un timestamp.

## Sintassi
<a name="r_EXTRACT_function-synopsis"></a>

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

## Arguments (Argomenti)
<a name="r_EXTRACT_function-arguments"></a>

 *datepart*   
Il sottocampo di una data o ora da estrarre, ad esempio un giorno, un mese, un anno, un'ora, un minuto, un secondo, un millisecondo o un microsecondo. Per un elenco dei valori possibili, consultare [Parti di data per funzioni di data e timestamp](r_Dateparts_for_datetime_functions.md). 

 *source (origine)*   
Una colonna o un’espressione che restituisce un tipo di dati TIMESTAMP, TIMESTAMPTZ, TIME, TIMETZ, INTERVAL YEAR TO MONTH o INTERVAL DAY TO SECOND.

## Tipo restituito
<a name="r_EXTRACT_function-return-type"></a>

INTEGER se il valore di *origine* restituisce un tipo di dati TIMESTAMP, TIME, TIMETZ, INTERVAL YEAR TO MONTH o INTERVAL DAY TO SECOND.

DOUBLE PRECISION se il valore di *origine* restituisce il tipo di dati TIMESTAMPTZ.

## Esempi con TIMESTAMP
<a name="r_EXTRACT_function-examples"></a>

Nel seguente esempio viene determinato il numero di settimane per le vendite il cui prezzo pagato è stato uguale o superiore a 10.000 USD. Questo esempio utilizza i dati TICKIT. Per ulteriori informazioni, consulta [Database di esempio](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
```

L'esempio seguente restituisce il valore di minuti da un valore di timestamp letterale. 

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

L'esempio seguente restituisce il valore in millisecondi da un valore di timestamp letterale. 

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

## Esempi con TIMESTAMPTZ
<a name="r_EXTRACT_function-examples-timestamptz"></a>

L'esempio seguente restituisce il valore di anno da un valore di timestamp letterale. 

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

## Esempi con TIME
<a name="r_EXTRACT_function-examples-time"></a>

La tabella di esempio seguente TIME\$1TEST ha una colonna TIME\$1VAL (tipo TIME) con tre valori inseriti. 

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

Nell'esempio seguente vengono estratti i minuti da ogni timetz\$1val.

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

Nell'esempio seguente vengono estratte le ore da ogni time\$1val.

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

Nell'esempio seguente vengono estratti i millisecondi da un valore letterale.

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

## Esempi con TIMETZ
<a name="r_EXTRACT_function-examples-timetz"></a>

La tabella di esempio seguente TIMETZ\$1TEST ha una colonna TIMETZ\$1VAL (tipo TIMETZ) con tre valori inseriti.

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

Nell'esempio seguente vengono estratte le ore da ogni timez\$1val.

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

Nell'esempio seguente vengono estratti i millisecondi da un valore letterale. I valori letterali non vengono convertiti in UTC prima dell'elaborazione dell'estrazione. 

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

L'esempio seguente restituisce l'ora dell'offset del fuso orario, da UTC da un valore timetz letterale. 

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

## Esempi con INTERVAL YEAR TO MONTH e INTERVAL DAY TO SECOND
<a name="r_EXTRACT_function-examples-interval"></a>

L’esempio seguente estrae la parte relativa ai giorni `1` da INTERVAL DAY TO SECOND che definisce 36 ore, ovvero 1 giorno e 12 ore.

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

L’esempio seguente estrae la parte relativa ai mesi `3` da YEAR TO MONTH che definisce 15 mesi, ovvero 1 anno e 3 mesi.

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

L’esempio seguente estrae la parte relativa ai mesi `6` da 30 mesi, ovvero 2 anni e 6 mesi.

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

L’esempio seguente estrae la parte relativa alle ore `2` da 50 ore, ovvero 2 giorni e 2 ore.

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

L’esempio seguente estrae la parte relativa ai minuti `11` da 1 ora, 11 minuti e 11.123 secondi.

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

L’esempio seguente estrae la parte relativa ai secondi `1.11` da 1 giorno, 1 ora, 1 minuto e 1,11 secondi.

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

L’esempio seguente estrae il numero totale di ore in un INTERVALLO. Ogni parte viene estratta e aggiunta a un totale.

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

L’esempio seguente estrae il numero totale di secondi in un INTERVALLO. Ogni parte viene estratta e aggiunta a un totale.

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