Fungsi tanggal dan waktu

Pengantar Redshift

Jason Myers

Principal Architect

Mengambil tanggal dan waktu saat ini

  • SYSDATE tanggal dan waktu saat transaksi dimulai
-- Ambil tanggal dan waktu saat ini
SELECT SYSDATE;
timestamp
============================
2024-01-27 20:05:55.976353
  • GETDATE() tanggal dan waktu saat pernyataan dimulai, wajib memakai tanda kurung
-- Ambil tanggal dan waktu saat ini
SELECT GETDATE();
timestamp
============================
2024-01-27 20:06:55.976353
Pengantar Redshift

Perilaku fungsi tanggal dan waktu

Perhatikan fungsi khusus leader node!

  • DATEDIFF dibanding AGE
  • GETDATE/SYSDATE dibanding fungsi khusus leader:
    • CURRENT_TIME
    • CURRENT_TIMESTAMP
    • ISFINITE
    • LOCALTIME
    • LOCALTIMESTAMP
    • NOW
Pengantar Redshift

Memotong tanggal dan waktu

  • TRUNC mengembalikan tanggal dari timestamp
-- Ambil tanggal saat ini berdasarkan 
-- SYSDATE 2024-01-27 20:05:55.976353
SELECT TRUNC(SYSDATE);
2024-01-27
  • DATE_TRUNC('datepart', timestamp) memotong ke datepart seperti hour atau day
-- Potong ke menit berdasarkan 
-- SYSDATE 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
Pengantar Redshift

Mengambil bagian dari date dan timestamp

  • DATE_PART(datepart, date or timestamp)
    • mengekstrak bagian yang diminta dari date atau timestamp
-- Ambil bulan saat ini berdasarkan 
-- SYSDATE 2024-01-27 20:05:55.976353
SELECT DATE_PART(month, SYSDATE);
1
  • Dapat mengembalikan lebih dari month, day, year
    • Contoh: dayofweek, quarter, timezone
-- Ambil hari dalam minggu saat ini berdasarkan 
-- SYSDATE 2024-01-27 20:05:55.976353
SELECT DATE_PART(dayofweek, SYSDATE);
6
Pengantar Redshift

Membandingkan tanggal dan waktu

  • DATE_CMP(date_1, date_2) perbandingan relatif

    • Mengembalikan -1 jika date_1 lebih awal
    • Mengembalikan 0 jika sama
    • Mengembalikan 1 jika date_1 lebih akhir
  • Fungsi spesifik tipe

    • DATE_CMP_TIMESTAMP
    • DATE_CMP_TIMESTAMPTZ
    • TIMESTAMP_CMP
    • TIMESTAMP_CMP_TIMESTAMPTZ
    • TIMESTAMPTZ_CMP
-- Bandingkan 5 tanggal dari tabel berdasarkan 
-- SYSDATE 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
Pengantar Redshift

Menghitung selisih

  • DATEDIFF(datepart, value_1, value_2)
  • Mendukung date, time, timetz, atau timestamp di kedua posisi
    • Harus memuat datepart
  • Mengembalikan
    • nilai negatif jika value_2 lebih awal
    • 0 jika sama
    • nilai positif jika value_2 lebih akhir
Pengantar Redshift

Menggunakan DATEDIFF

-- Hari sampai akhir kuartal pertama berdasarkan 
-- SYSDATE 2024-01-27 20:05:55.976353
SELECT DATEDIFF(day,TRUNC(SYSDATE),'2024-03-31') AS days_diff;
days_diff
===========
64
Pengantar Redshift

Menambah tanggal dan waktu

  • DATEADD(datepart, quantity, value)
  • Mendukung date, time, timetz, atau timestamp
  • Quantity bisa negatif untuk menguranginya
-- Tambah 1 minggu ke tanggal berdasarkan 
-- SYSDATE 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
Pengantar Redshift

Menambah tanggal dan waktu... perhatian

  • Tahun kabisat per bulan mengembalikan akhir bulan
-- Tambah tahun per bulan ke tanggal
SELECT DATEADD(month, 12, '2024-02-29');
2025-02-28 00:00:00
  • Tahun kabisat per tahun mengembalikan hari berikutnya
-- Tambah tahun per tahun ke tanggal
SELECT DATEADD(year, 1, '2024-02-29');
2025-03-01 00:00:00
Pengantar Redshift

Ayo berlatih!

Pengantar Redshift

Preparing Video For Download...