Hàm ngày và giờ

Giới thiệu về Redshift

Jason Myers

Principal Architect

Lấy ngày giờ hiện tại

  • SYSDATE ngày giờ tại lúc bắt đầu giao dịch
-- Lấy ngày giờ hiện tại
SELECT SYSDATE;
timestamp
============================
2024-01-27 20:05:55.976353
  • GETDATE() ngày giờ tại lúc bắt đầu câu lệnh, cần dấu ngoặc
-- Lấy ngày giờ hiện tại
SELECT GETDATE();
timestamp
============================
2024-01-27 20:06:55.976353
Giới thiệu về Redshift

Hành vi hàm ngày giờ

Lưu ý các hàm chỉ chạy trên leader node!

  • Ưu tiên DATEDIFF thay vì AGE
  • Dùng GETDATE/SYSDATE thay vì các hàm chỉ chạy trên leader:
    • CURRENT_TIME
    • CURRENT_TIMESTAMP
    • ISFINITE
    • LOCALTIME
    • LOCALTIMESTAMP
    • NOW
Giới thiệu về Redshift

Cắt bớt ngày và giờ

  • TRUNC trả về date từ timestamp
-- Lấy ngày hiện tại dựa trên 
-- SYSDATE 2024-01-27 20:05:55.976353
SELECT TRUNC(SYSDATE);
2024-01-27
  • DATE_TRUNC('datepart', timestamp) cắt theo datepart như hour hoặc day
-- Cắt đến phút dựa trên 
-- 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
Giới thiệu về Redshift

Lấy các phần của date và timestamp

  • DATE_PART(datepart, date or timestamp)
    • trích phần được yêu cầu từ date hoặc timestamp
-- Lấy tháng hiện tại dựa trên 
-- SYSDATE 2024-01-27 20:05:55.976353
SELECT DATE_PART(month, SYSDATE);
1
  • Có thể trả về nhiều hơn month, day, year
    • Ví dụ: dayofweek, quarter, timezone
-- Lấy thứ hiện tại dựa trên 
-- SYSDATE 2024-01-27 20:05:55.976353
SELECT DATE_PART(dayofweek, SYSDATE);
6
Giới thiệu về Redshift

So sánh ngày và giờ

  • DATE_CMP(date_1, date_2) so sánh tương đối

    • Trả về -1 nếu date_1 sớm hơn
    • Trả về 0 nếu bằng nhau
    • Trả về 1 nếu date_1 muộn hơn
  • Hàm theo kiểu

    • DATE_CMP_TIMESTAMP
    • DATE_CMP_TIMESTAMPTZ
    • TIMESTAMP_CMP
    • TIMESTAMP_CMP_TIMESTAMPTZ
    • TIMESTAMPTZ_CMP
-- So sánh 5 ngày từ bảng dựa trên 
-- 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
Giới thiệu về Redshift

Tính chênh lệch

  • DATEDIFF(datepart, value_1, value_2)
  • Hỗ trợ date, time, timetz, hoặc timestamp ở cả hai vị trí
    • Phải chứa datepart
  • Trả về
    • số âm nếu value_2 sớm hơn
    • 0 nếu bằng nhau
    • số dương nếu value_2 muộn hơn
Giới thiệu về Redshift

Dùng DATEDIFF

-- Số ngày đến cuối quý I dựa trên 
-- SYSDATE 2024-01-27 20:05:55.976353
SELECT DATEDIFF(day,TRUNC(SYSDATE),'2024-03-31') AS days_diff;
days_diff
===========
64
Giới thiệu về Redshift

Tăng ngày và giờ

  • DATEADD(datepart, quantity, value)
  • Hỗ trợ date, time, timetz, hoặc timestamp
  • quantity có thể âm để trừ
-- Cộng 1 tuần vào một ngày dựa trên 
-- 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
Giới thiệu về Redshift

Tăng ngày giờ... lưu ý

  • Năm nhuận cộng theo tháng trả về ngày cuối tháng
-- Cộng năm theo tháng vào một ngày
SELECT DATEADD(month, 12, '2024-02-29');
2025-02-28 00:00:00
  • Năm nhuận cộng theo năm trả về ngày kế tiếp
-- Cộng năm theo năm vào một ngày
SELECT DATEADD(year, 1, '2024-02-29');
2025-03-01 00:00:00
Giới thiệu về Redshift

Ayo berlatih!

Giới thiệu về Redshift

Preparing Video For Download...