ฟังก์ชันวันที่และเวลา

Introduction to Redshift

Jason Myers

Principal Architect

ดึงวันที่และเวลาปัจจุบัน

  • SYSDATE วันที่และเวลา ณ จุดเริ่มต้นของ transaction
-- Get current date and time
SELECT SYSDATE;
timestamp
============================
2024-01-27 20:05:55.976353
  • GETDATE() วันที่และเวลา ณ จุดเริ่มต้นของ statement ต้องใส่วงเล็บ
-- Get current date and time
SELECT GETDATE();
timestamp
============================
2024-01-27 20:06:55.976353
Introduction to Redshift

พฤติกรรมของฟังก์ชันวันที่และเวลา

ระวังฟังก์ชันที่ทำงานได้เฉพาะบน leader node!

  • ใช้ DATEDIFF แทน AGE
  • ใช้ GETDATE/SYSDATE แทนฟังก์ชันเฉพาะ leader node:
    • CURRENT_TIME
    • CURRENT_TIMESTAMP
    • ISFINITE
    • LOCALTIME
    • LOCALTIMESTAMP
    • NOW
Introduction to Redshift

การตัดทอนวันที่และเวลา

  • TRUNC คืนค่าวันที่จาก timestamp
-- Get current date based on 
-- SYSDATE of 2024-01-27 20:05:55.976353
SELECT TRUNC(SYSDATE);
2024-01-27
  • DATE_TRUNC('datepart', timestamp) ตัดทอนไปยัง datepart เช่น ชั่วโมงหรือวัน
-- Truncate to hour based on 
-- SYSDATE of 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 to Redshift

การดึงส่วนประกอบจากวันที่และ timestamp

  • DATE_PART(datepart, date or timestamp)
    • ดึงส่วนที่ต้องการจากวันที่หรือ timestamp
-- Get current month based on 
-- SYSDATE of 2024-01-27 20:05:55.976353
SELECT DATE_PART(month, SYSDATE);
1
  • คืนค่าได้มากกว่า month, day, year
    • ตัวอย่าง: dayofweek, quarter, timezone
-- Get current day of week based on 
-- SYSDATE of 2024-01-27 20:05:55.976353
SELECT DATE_PART(dayofweek, SYSDATE);
6
Introduction to Redshift

การเปรียบเทียบวันที่และเวลา

  • DATE_CMP(date_1, date_2) เปรียบเทียบแบบสัมพัทธ์

    • คืนค่า -1 ถ้า date_1 อยู่ก่อน
    • คืนค่า 0 ถ้าวันที่เท่ากัน
    • คืนค่า 1 ถ้า date_1 อยู่หลัง
  • ฟังก์ชันเฉพาะชนิดข้อมูล

    • DATE_CMP_TIMESTAMP
    • DATE_CMP_TIMESTAMPTZ
    • TIMESTAMP_CMP
    • TIMESTAMP_CMP_TIMESTAMPTZ
    • TIMESTAMPTZ_CMP
-- Compare 5 dates from a table based on 
-- SYSDATE of 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 to Redshift

การคำนวณความแตกต่างของวันที่

  • DATEDIFF(datepart, value_1, value_2)
  • รองรับ date, time, timetz หรือ timestamp ในทั้งสองตำแหน่ง
    • ต้องระบุ datepart
  • คืนค่า
    • ค่าลบ ถ้า value_2 อยู่ก่อน
    • คืนค่า 0 ถ้าวันที่เท่ากัน
    • ค่าบวก ถ้า value_2 อยู่หลัง
Introduction to Redshift

การใช้งาน DATEDIFF

-- Days till end of first quarter based on 
-- SYSDATE of 2024-01-27 20:05:55.976353
SELECT DATEDIFF(day,TRUNC(SYSDATE),'2024-03-31') AS days_diff;
days_diff
===========
64
Introduction to Redshift

การเพิ่มค่าวันที่และเวลา

  • DATEADD(datepart, quantity, value)
  • รองรับ date, time, timetz หรือ timestamp
  • quantity เป็นค่าลบได้เพื่อลบออก
-- Add week to a date based on 
-- SYSDATE of 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 to Redshift

การเพิ่มค่าวันที่และเวลา... ข้อควรระวัง

  • ปีอธิกสุรทินที่เพิ่มด้วยเดือนจะคืนค่าวันสุดท้ายของเดือน
-- Add year by months to a date
SELECT DATEADD(month, 12, '2024-02-29');
2025-02-28 00:00:00
  • ปีอธิกสุรทินที่เพิ่มด้วยปีจะคืนค่าวันถัดไป
-- Add year by year to a date
SELECT DATEADD(year, 1, '2024-02-29');
2025-03-01 00:00:00
Introduction to Redshift

มาฝึกกันเถอะ!

Introduction to Redshift

Preparing Video For Download...