Fonction DATEDIFF - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Fonction DATEDIFF

DATEDIFF renvoie la différence entre les parties de date de deux expressions de date ou d’heure.

Syntaxe

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

Arguments

datepart

Partie spécifique de la valeur date ou time (année, mois, ou jour, heure, minute, seconde, milliseconde ou microseconde) sur laquelle la fonction opère. Pour plus d'informations, consultez Parties de date pour les fonctions de date ou d’horodatage.

Plus précisément, DATEDIFF détermine le nombre de limites de partie de date qui sont traversées entre deux expressions. Par exemple, supposons que vous calculez la différence en années entre deux dates, 12-31-2008 et 01-01-2009. Dans ce cas, la fonction renvoie 1 an malgré le fait que ces dates n’ont qu’un jour d’écart. Si vous trouvez la différence en heures entre les deux horodatages, 01-01-2009 8:30:00 et 01-01-2009 10:00:00, le résultat est 2 heures. Si vous trouvez la différence en heures entre les deux horodatages, 8:30:00 et 10:00:00, le résultat est 2 heures.

date|time|timetz|timestamp

Une colonne ou des expressions DATE, TIME, TIMETZ ou TIMESTAMP qui se convertissent implicitement en DATE, TIME, TIMETZ ou TIMESTAMP. Les expressions régulières doivent contenir la date ou partie de date spécifiée. Si la seconde date ou heure est ultérieure à la première date ou heure, le résultat est positif. Si la seconde date ou heure est antérieure à la première date ou heure, le résultat est négatif.

Type de retour

BIGINT

Exemples avec une colonne DATE

L’exemple suivant met en évidence la différence, en nombre de semaines, entre deux valeurs de date littérales.

select datediff(week,'2009-01-01','2009-12-31') as numweeks; numweeks ---------- 52 (1 row)

L’exemple suivant permet de trouver la différence, en heures, entre deux valeurs littérales de date. Si vous n’indiquez pas la valeur temporelle d’une date, celle-ci est fixée par défaut à 00:00:00.

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

L’exemple suivant permet de trouver la différence, en jours, entre deux valeurs TIMESTAMETZ littérales.

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

L’exemple suivant permet de trouver la différence, en jours, entre deux dates figurant sur la même ligne d’une table.

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)

L’exemple suivant met en évidence la différence, dans le nombre de trimestres, entre une valeur littérale dans le passé et la date du jour. Cet exemple suppose que la date du jour est le 5 juin 2008. Vous pouvez nommer les parties de date intégralement ou les abréger. Le nom de colonne par défaut pour la fonction DATEDIFF est DATE_DIFF.

select datediff(qtr, '1998-07-01', current_date); date_diff ----------- 40 (1 row)

L’exemple suivant joint les tables SALES et LISTING pour calculer combien de jours après leur mise en vente des billets ont été vendus pour les listes 1000 à 1005. L’attente la plus longue pour les ventes de ces listes a été 15 jours, et la plus courte a été de moins d’une journée (0 jour).

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)

Cet exemple calcule la moyenne du nombre d’heures que les vendeurs ont attendu pour toutes les ventes de billets.

select avg(datediff(hours, listtime, saletime)) as avgwait from sales, listing where sales.listid = listing.listid; avgwait --------- 465 (1 row)

Exemples avec une colonne TIME

L'exemple de table TIME_TEST suivant comporte une colonne TIME_VAL (type TIME) avec trois valeurs insérées.

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

L’exemple suivant montre comment trouver la différence en nombre d’heures entre la colonne TIME_VAL et une valeur de temps littérale.

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

L’exemple suivant montre comment trouver la différence en nombre de minutes entre deux valeurs de temps littérales.

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

Exemples avec une colonne TIMETZ

L'exemple de table TIMETZ_TEST suivant comporte une colonne TIMETZ_VAL (type TIMETZ) avec trois valeurs insérées.

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

L’exemple suivant montre comment trouver la différence en nombre d’heures entre une valeur TIMETZ littérale et une valeur timez_val.

select datediff(hours, timetz '20:00:00 PST', timetz_val) as numhours from timetz_test; numhours ---------- 0 -4 1

L’exemple suivant montre comment trouver la différence en nombre d’heures entre deux valeurs TIMETZ littérales.

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