

 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 DATEDIFF
<a name="r_DATEDIFF_function"></a>

DATEDIFF restituisce la differenza tra le parti di data di due espressioni di data o di ora. 

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

```
DATEDIFF( datepart, {date|time|timetz|timestamp}, {date|time|timetz|timestamp} )
```

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

 *datepart*   
La parte specifica del valore di data o ora (anno, mese o giorno, ora, minuto, secondo, millisecondo o microsecondo) su cui la funzione opera. Per ulteriori informazioni, consultare [Parti di data per funzioni di data e timestamp](r_Dateparts_for_datetime_functions.md).   
Più precisamente, DATEDIFF determina il numero di limiti di parte di data tra due espressioni. Ad esempio, si supponga di calcolare la differenza in anni tra due date, `12-31-2008` e `01-01-2009`. In questo caso, la funzione restituisce 1 anno nonostante il fatto che queste date siano separate solo da un giorno. Se cerchi la differenza in ore tra due timestamp, `01-01-2009 8:30:00` e `01-01-2009 10:00:00`, il risultato è 2 ore. Se cerchi la differenza in ore tra due timestamp, `8:30:00` e `10:00:00`, il risultato è 2 ore.

*date*\$1*time*\$1*timetz*\$1*timestamp*  
Una colonna o le espressioni DATE, TIME, TIMETZ, or TIMESTAMP che viene implicitamente convertita in un DATE, TIME, TIMETZ o TIMESTAMP. Le espressioni devono entrambe contenere la parte di data o di ora specificata. Se la seconda data o ora è posteriore alla prima, il risultato è positivo. Se la seconda data o ora è anteriore alla prima, il risultato è negativo.

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

BIGINT

## Esempi con una colonna DATE
<a name="r_DATEDIFF_function-examples"></a>

Nell'esempio seguente viene rilevata la differenza in numero di settimane tra due valori di data letterali. 

```
select datediff(week,'2009-01-01','2009-12-31') as numweeks;

numweeks
----------
52
(1 row)
```

Nell'esempio seguente viene rilevata la differenza in ore tra due valori di data letterali. Quando non si fornisce il valore dell'ora per una data, il valore predefinito è 00:00:00.

```
select datediff(hour, '2023-01-01', '2023-01-03 05:04:03');
            
date_diff
----------
53
(1 row)
```

Nell'esempio seguente viene rilevata la differenza in giorni tra due valori TIMESTAMETZ letterali. 

```
Select datediff(days, 'Jun 1,2008  09:59:59 EST', 'Jul 4,2008  09:59:59 EST')
         
date_diff
----------
33
```

Nell'esempio seguente viene rilevata la differenza, in giorni, tra due date nella stessa riga di una tabella.

```
select * from date_table;

start_date |   end_date
-----------+-----------
2009-01-01 | 2009-03-23
2023-01-04 | 2024-05-04
(2 rows)

select datediff(day, start_date, end_date) as duration from date_table;
         
duration
---------
      81
     486
(2 rows)
```

Nel seguente esempio viene trovata la differenza, in numero di trimestri, tra un valore letterale nel passato e la data odierna. Questo esempio presuppone che la data corrente è il 5 giugno 2008. È possibile assegnare un nome completo o abbreviato alle parti di data. Il nome di colonna predefinito per la funzione DATEDIFF è DATE\$1DIFF. 

```
select datediff(qtr, '1998-07-01', current_date);

date_diff
-----------
40
(1 row)
```

In questo esempio viene eseguito il join delle tabelle SALES e LISTING per calcolare quanti giorni dopo la pubblicazione sono stati venduti i biglietti per i risultati da 1000 a 1005. L'attesa più lunga per la vendita di questi elenchi è di 15 giorni e quella più breve è inferiore a 1 giorno (0 giorni). 

```
select priceperticket,
datediff(day, listtime, saletime) as wait
from sales, listing where sales.listid = listing.listid
and sales.listid between 1000 and 1005
order by wait desc, priceperticket desc;

priceperticket | wait
---------------+------
 96.00         |   15
 123.00        |   11
 131.00        |    9
 123.00        |    6
 129.00        |    4
 96.00         |    4
 96.00         |    0
(7 rows)
```

Questo esempio calcola il numero medio di ore di attesa dei venditori per tutte le vendite di biglietti. 

```
select avg(datediff(hours, listtime, saletime)) as avgwait
from sales, listing
where sales.listid = listing.listid;

avgwait
---------
465
(1 row)
```

## Esempi con una colonna TIME
<a name="r_DATEDIFF_function-examples-time"></a>

La tabella di esempio seguente TIME\$1TEST contiene 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 viene rilevata la differenza di numero di ore tra la colonna TIME\$1VAL e un valore letterale temporale.

```
select datediff(hour, time_val, time '15:24:45') from time_test;
         
 date_diff
-----------
        -5
        15
        15
```

Nell'esempio seguente viene rilevata la differenza in numero di minuti tra due valori letterali temporali.

```
select datediff(minute, time '20:00:00', time '21:00:00') as nummins;  
         
nummins 
---------- 
60
```

## Esempi con una colonna TIMETZ
<a name="r_DATEDIFF_function-examples-timetz"></a>

La tabella di esempio seguente TIMETZ\$1TEST contiene 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 individuate le differenze nel numero di ore, tra un letterale TIMETZ e timetz\$1val. 

```
select datediff(hours, timetz '20:00:00 PST', timetz_val) as numhours from timetz_test;

numhours 
---------- 
0
-4
1
```

Nell'esempio seguente viene rilevata la differenza in numero di ore tra due valori TIMETZ letterali.

```
select datediff(hours, timetz '20:00:00 PST', timetz '00:58:00 EST') as numhours;
         
numhours 
---------- 
1
```