Fonctions de date et d'heure

Introduction à Redshift

Jason Myers

Principal Architect

Obtenir la date et l'heure actuelles

  • SYSDATE date et heure au début de la transaction
-- Obtenir la date et l'heure actuelles
SELECT SYSDATE;
timestamp
============================
2024-01-27 20:05:55.976353
  • GETDATE() date et heure au début de l'instruction, nécessite des parenthèses
-- Obtenir la date et l'heure actuelles
SELECT GETDATE();
timestamp
============================
2024-01-27 20:06:55.976353
Introduction à Redshift

Comportement des fonctions de date et d'heure

Attention aux fonctions réservées au nœud chef !

  • Préférer DATEDIFF à AGE
  • Préférer GETDATE/SYSDATE aux fonctions propres au nœud chef :
    • CURRENT_TIME
    • CURRENT_TIMESTAMP
    • ISFINITE
    • LOCALTIME
    • LOCALTIMESTAMP
    • NOW
Introduction à Redshift

Tronquer des dates et heures

  • TRUNC retourne une date à partir d'un horodatage
-- Obtenir la date courante à partir de 
-- SYSDATE de 2024-01-27 20:05:55.976353
SELECT TRUNC(SYSDATE);
2024-01-27
  • DATE_TRUNC('datepart', timestamp) tronque selon une partie comme heure ou jour
-- Tronquer à la minute à partir de 
-- SYSDATE de 2024-01-27 20:05:55.976353
SELECT DATE_TRUNC('minute', SYSDATE);
2024-01-27 20:05:55
1 https://docs.aws.amazon.com/redshift/latest/dg/r_Dateparts_for_datetime_functions.html
Introduction à Redshift

Obtenir des parties de dates et d'horodatages

  • DATE_PART(datepart, date or timestamp)
    • extrait la partie demandée d'une date ou d'un horodatage
-- Obtenir le mois courant à partir de 
-- SYSDATE de 2024-01-27 20:05:55.976353
SELECT DATE_PART(month, SYSDATE);
1
  • Peut retourner plus que month, day, year
    • Exemples : dayofweek, quarter, timezone
-- Obtenir le jour de la semaine à partir de 
-- SYSDATE de 2024-01-27 20:05:55.976353
SELECT DATE_PART(dayofweek, SYSDATE);
6
Introduction à Redshift

Comparer des dates et des heures

  • DATE_CMP(date_1, date_2) comparaison relative

    • Retourne -1 si date_1 est antérieure
    • Retourne 0 si les dates sont égales
    • Retourne 1 si date_1 est postérieure
  • Fonctions propres aux types

    • DATE_CMP_TIMESTAMP
    • DATE_CMP_TIMESTAMPTZ
    • TIMESTAMP_CMP
    • TIMESTAMP_CMP_TIMESTAMPTZ
    • TIMESTAMPTZ_CMP
-- Comparer 5 dates d'une table à partir de 
-- SYSDATE de 2024-01-27 20:05:55.976353
  SELECT date_col, 
         TRUNC(SYSDATE) AS current_date,
         DATE_CMP(date_col, SYSDATE)
    FROM combined_history_projections
ORDER BY date_col
   LIMIT 3;
 date_col  |  current_date | date_cmp
===========|===============|==========
2024-01-26 | 2024-01-27    |       -1
2024-01-27 | 2024-01-27    |        0
2024-01-28 | 2024-01-27    |        1
Introduction à Redshift

Calculer des écarts

  • DATEDIFF(datepart, value_1, value_2)
  • Accepte date, time, timetz ou timestamp dans l'un ou l'autre paramètre
    • Doit contenir la partie de date
  • Retourne
    • une valeur négative si value_2 est antérieure
    • Retourne 0 si les dates sont égales
    • une valeur positive si value_2 est postérieure
Introduction à Redshift

Utiliser DATEDIFF

-- Jours restants jusqu'à la fin du premier trimestre à partir de 
-- SYSDATE de 2024-01-27 20:05:55.976353
SELECT DATEDIFF(day,TRUNC(SYSDATE),'2024-03-31') AS days_diff;
days_diff
===========
64
Introduction à Redshift

Incrémenter des dates et des heures

  • DATEADD(datepart, quantity, value)
  • Accepte date, time, timetz ou timestamp
  • La quantité peut être négative pour soustraire
-- Ajouter une semaine à une date à partir de 
-- SYSDATE de 2024-01-27 20:05:55.976353
SELECT TRUNC(SYSDATE) AS todays_date,
       TRUNC(DATEADD(week, 1, SYSDATE)) AS next_weeks_date;
todays_date | next_weeks_date
============|==================
2024-01-27  | 2024-02-03
Introduction à Redshift

Incrémenter des dates et des heures : pièges à éviter

  • Les années bissextiles ajoutées par mois renvoient la fin du mois
-- Ajouter une année en mois à une date
SELECT DATEADD(month, 12, '2024-02-29');
2025-02-28 00:00:00
  • Les années bissextiles ajoutées par année renvoient le jour suivant
-- Ajouter une année en années à une date
SELECT DATEADD(year, 1, '2024-02-29');
2025-03-01 00:00:00
Introduction à Redshift

Passons à la pratique !

Introduction à Redshift

Preparing Video For Download...