Tarih ve saat işlevleri

Redshift’e Giriş

Jason Myers

Principal Architect

Geçerli tarih ve saati alma

  • SYSDATE işlem başlangıcındaki tarih ve saat
-- Geçerli tarih ve saati alın
SELECT SYSDATE;
timestamp
============================
2024-01-27 20:05:55.976353
  • GETDATE() ifade başlangıcındaki tarih ve saat, parantez gerekir
-- Geçerli tarih ve saati alın
SELECT GETDATE();
timestamp
============================
2024-01-27 20:06:55.976353
Redshift’e Giriş

Tarih ve saat işlevi davranışı

Yalnızca lider düğümde çalışan işlevlere dikkat!

  • AGE yerine DATEDIFF
  • Lider’e özgü işlevler yerine GETDATE/SYSDATE:
    • CURRENT_TIME
    • CURRENT_TIMESTAMP
    • ISFINITE
    • LOCALTIME
    • LOCALTIMESTAMP
    • NOW
Redshift’e Giriş

Tarih ve saatleri kırpma

  • TRUNC bir timestamp'ten tarih döndürür
-- 2024-01-27 20:05:55.976353 SYSDATE'ine göre
-- bugünün tarihini alın
SELECT TRUNC(SYSDATE);
2024-01-27
  • DATE_TRUNC('datepart', timestamp) saat veya gün gibi bir datepart'a kırpar
-- 2024-01-27 20:05:55.976353 SYSDATE'ine göre
-- dakikaya kırpın
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
Redshift’e Giriş

Tarih ve timestamp parçalarını alma

  • DATE_PART(datepart, date or timestamp)
    • bir tarih veya timestamp'ten istenen kısmı çıkarır
-- 2024-01-27 20:05:55.976353 SYSDATE'ine göre
-- geçerli ayı alın
SELECT DATE_PART(month, SYSDATE);
1
  • month, day, year dışında da döndürebilir
    • Örnekler: dayofweek, quarter, timezone
-- 2024-01-27 20:05:55.976353 SYSDATE'ine göre
-- haftanın gününü alın
SELECT DATE_PART(dayofweek, SYSDATE);
6
Redshift’e Giriş

Tarih ve saatleri karşılaştırma

  • DATE_CMP(date_1, date_2) göreli karşılaştırma

    • date_1 daha erkense -1 döndürür
    • eşitse 0 döndürür
    • date_1 daha geçse 1 döndürür
  • Türe özel işlevler

    • DATE_CMP_TIMESTAMP
    • DATE_CMP_TIMESTAMPTZ
    • TIMESTAMP_CMP
    • TIMESTAMP_CMP_TIMESTAMPTZ
    • TIMESTAMPTZ_CMP
-- 2024-01-27 20:05:55.976353 SYSDATE'ine göre
-- bir tablodaki 5 tarihi karşılaştırın
  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
Redshift’e Giriş

Farkları hesaplama

  • DATEDIFF(datepart, value_1, value_2)
  • Her iki konumda date, time, timetz veya timestamp destekler
    • datepart içermelidir
  • Döndürür
    • value_2 daha erkense negatif
    • eşitse 0
    • value_2 daha geçse pozitif
Redshift’e Giriş

DATEDIFF kullanımı

-- İlk çeyrek sonuna gün sayısı,
-- 2024-01-27 20:05:55.976353 SYSDATE'ine göre
SELECT DATEDIFF(day,TRUNC(SYSDATE),'2024-03-31') AS days_diff;
days_diff
===========
64
Redshift’e Giriş

Tarih ve saatleri artırma

  • DATEADD(datepart, quantity, value)
  • date, time, timetz veya timestamp destekler
  • Miktar çıkarma için negatif olabilir
-- 2024-01-27 20:05:55.976353 SYSDATE'ine göre
-- bir haftayı tarihe ekleyin
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
Redshift’e Giriş

Tarih ve saatleri artırma... dikkat edilmesi gerekenler

  • Artık yıllarda aya göre ekleme ay sonunu döndürür
-- Bir tarihe ay bazında yıl ekleyin
SELECT DATEADD(month, 12, '2024-02-29');
2025-02-28 00:00:00
  • Artık yıllarda yıla göre ekleme ertesi günü döndürür
-- Bir tarihe yıl bazında yıl ekleyin
SELECT DATEADD(year, 1, '2024-02-29');
2025-03-01 00:00:00
Redshift’e Giriş

Ayo berlatih!

Redshift’e Giriş

Preparing Video For Download...