Funzione DATEDIFF - Amazon Redshift

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.

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

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

Sintassi

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

Arguments (Argomenti)

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.

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|time|timetz|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

BIGINT

Esempi con una colonna DATE

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_DIFF.

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

La tabella di esempio seguente TIME_TEST contiene una colonna TIME_VAL (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_VAL 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

La tabella di esempio seguente TIMETZ_TEST contiene una colonna TIMETZ_VAL (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_val.

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