Datum- en tijdfuncties

Introductie tot Redshift

Jason Myers

Principal Architect

Huidige datum en tijd ophalen

  • SYSDATE datum en tijd bij start van transactie
-- Huidige datum en tijd ophalen
SELECT SYSDATE;
timestamp
============================
2024-01-27 20:05:55.976353
  • GETDATE() datum en tijd bij start van statement, haakjes verplicht
-- Huidige datum en tijd ophalen
SELECT GETDATE();
timestamp
============================
2024-01-27 20:06:55.976353
Introductie tot Redshift

Gedrag van datum- en tijdfuncties

Let op: alleen leader node-functies!

  • DATEDIFF boven AGE
  • GETDATE/SYSDATE boven leader-specifieke functies:
    • CURRENT_TIME
    • CURRENT_TIMESTAMP
    • ISFINITE
    • LOCALTIME
    • LOCALTIMESTAMP
    • NOW
Introductie tot Redshift

Datums en tijden afkappen

  • TRUNC geeft een datum terug uit een timestamp
-- Huidige datum ophalen op basis van 
-- SYSDATE van 2024-01-27 20:05:55.976353
SELECT TRUNC(SYSDATE);
2024-01-27
  • DATE_TRUNC('datepart', timestamp) kapt af tot een datepart zoals uur of dag
-- Afkappen tot minuut op basis van 
-- SYSDATE van 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
Introductie tot Redshift

Delen van datums en timestamps ophalen

  • DATE_PART(datepart, date or timestamp)
    • haalt het gevraagde deel uit een date of timestamp
-- Huidige maand ophalen op basis van 
-- SYSDATE van 2024-01-27 20:05:55.976353
SELECT DATE_PART(month, SYSDATE);
1
  • Kan meer teruggeven dan month, day, year
    • Voorbeelden: dayofweek, quarter, timezone
-- Huidige dag van de week ophalen op basis van 
-- SYSDATE van 2024-01-27 20:05:55.976353
SELECT DATE_PART(dayofweek, SYSDATE);
6
Introductie tot Redshift

Datums en tijden vergelijken

  • DATE_CMP(date_1, date_2) relatieve vergelijking

    • Geeft -1 als date_1 eerder is
    • Geeft 0 als ze gelijk zijn
    • Geeft 1 als date_1 later is
  • Typespecifieke functies

    • DATE_CMP_TIMESTAMP
    • DATE_CMP_TIMESTAMPTZ
    • TIMESTAMP_CMP
    • TIMESTAMP_CMP_TIMESTAMPTZ
    • TIMESTAMPTZ_CMP
-- Vergelijk 5 datums uit een tabel op basis van 
-- SYSDATE van 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
Introductie tot Redshift

Verschillen berekenen

  • DATEDIFF(datepart, value_1, value_2)
  • Werkt met date, time, timetz of timestamp op beide posities
    • Moet de datepart bevatten
  • Retourneert
    • een negatief getal als value_2 eerder is
    • Geeft 0 als ze gelijk zijn
    • een positief getal als value_2 later is
Introductie tot Redshift

DATEDIFF gebruiken

-- Dagen tot het einde van Q1 op basis van 
-- SYSDATE van 2024-01-27 20:05:55.976353
SELECT DATEDIFF(day,TRUNC(SYSDATE),'2024-03-31') AS days_diff;
days_diff
===========
64
Introductie tot Redshift

Datums en tijden verhogen

  • DATEADD(datepart, quantity, value)
  • Werkt met date, time, timetz of timestamp
  • Quantity kan negatief zijn om te verminderen
-- Voeg een week toe aan een datum op basis van 
-- SYSDATE van 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
Introductie tot Redshift

Datums en tijden verhogen... valkuilen

  • Schrikkeljaren per maand geven einde van de maand terug
-- Voeg jaar per maand toe aan een datum
SELECT DATEADD(month, 12, '2024-02-29');
2025-02-28 00:00:00
  • Schrikkeljaren per jaar geven de volgende dag terug
-- Voeg jaar per jaar toe aan een datum
SELECT DATEADD(year, 1, '2024-02-29');
2025-03-01 00:00:00
Introductie tot Redshift

Laten we oefenen!

Introductie tot Redshift

Preparing Video For Download...