ในฐานะ System Specialist และ Senior Database Architect การจัดการกับข้อมูลวันและเวลา (Date and Time) อย่างแม่นยำเป็นหัวใจสำคัญของการออกแบบระบบฐานข้อมูลที่เชื่อถือได้ หากคุณกำลังทำงานกับ PostgreSQL คุณจะไม่ต้องกังวลเรื่องการคำนวณวันที่ที่ซับซ้อนอีกต่อไป เพราะ PostgreSQL มีชุดฟังก์ชันและไวยากรณ์ที่ทรงพลังในการเพิ่ม ลด หรือขยายช่วงเวลาได้อย่างง่ายดาย
วันและเวลาใน PostgreSQL: การคำนวณระยะห่าง (Date Arithmetic)
หลักการพื้นฐานของการจัดการวันที่ใน PostgreSQL คือการใช้คีย์เวิร์ด INTERVAL ซึ่งช่วยให้เราสามารถระบุช่วงเวลาที่ต้องการเพิ่มหรือลดได้ ไม่ว่าจะเป็นหน่วยวัน, ชั่วโมง, นาที หรือปี การคำนวณเหล่านี้จะถูกนำไปบวกหรือลบออกจากค่า Date/Timestamp เดิมโดยตรง ทำให้โค้ดมีความกระชับและอ่านง่าย
1. การเพิ่มและการลดช่วงเวลาพื้นฐาน (Days, Weeks)
การดำเนินการที่ง่ายที่สุดคือการบวกหรือลบค่า INTERVAL เข้ากับคอลัมน์วันที่ใด ๆ PostgreSQL จะจัดการเรื่องข้ามเดือนและปีให้โดยอัตโนมัติ
SQL
-- วันปัจจุบัน + 3 วันข้างหน้า (เพิ่มวัน)
SELECT current_date + interval '3 days';
-- วันที่เมื่อ 2 สัปดาห์ที่แล้ว (ลดสัปดาห์)
SELECT current_timestamp - interval '2 weeks';
2. การจัดการหน่วยเวลาที่ซับซ้อน (Months, Years)
สำหรับหน่วยเวลาที่ใหญ่ขึ้น เช่น เดือนหรือปี เรายังคงใช้ INTERVAL ได้ แต่ควรระมัดระวังเรื่องการคำนวณข้ามเดือนที่มีจำนวนวันไม่เท่ากัน (เช่น จากวันที่ 31 ไปเดือนถัดไป)
SQL
-- เพิ่ม 6 เดือนจากวันที่กำหนด
SELECT '2024-01-15'::date + interval '6 months';
-- ลด 1 ปีและ 3 เดือน (ผสมหน่วย)
SELECT current_date - interval '1 year' - interval '3 months';
3. การสร้างชุดข้อมูลช่วงเวลาด้วย generate_series
หากคุณต้องการคำนวณวันที่ต่อเนื่องเป็นลำดับ (เช่น ต้องการดู 30 วันข้างหน้า หรือต้องการวนลูปเพื่อหาค่าในแต่ละวัน) ฟังก์ชันที่ทรงพลังที่สุดคือ generate_series() ซึ่งช่วยสร้างชุดของ Timestamp ได้อย่างมีประสิทธิภาพ
SQL
-- สร้างช่วงวันที่ต่อเนื่อง 7 วัน (รวมวันเริ่มต้นด้วย)
SELECT generate_series(current_date, current_date + interval '6 days', interval '1 day');
บทสรุปและข้อสังเกตสำหรับสถาปนิกฐานข้อมูล
การใช้ INTERVAL ใน PostgreSQL ไม่เพียงแต่ทำให้โค้ดสะอาดตาเท่านั้น แต่ยังช่วยให้เรามั่นใจได้ว่าการคำนวณวันที่ของเราจะถูกต้องตามหลักปฏิทิน (Calendar Logic) โดยอัตโนมัติ ซึ่งเป็นสิ่งที่สำคัญอย่างยิ่งในการออกแบบระบบที่ต้องมีการตรวจสอบช่วงเวลา เช่น ระบบบัญชี หรือระบบติดตามสถานะสินค้า
จงจำไว้เสมอว่า PostgreSQL ถูกออกแบบมาให้จัดการความซับซ้อนของวันที่และเวลานี้ได้อย่างสมบูรณ์ ทำให้คุณสามารถเขียน Query ที่มีประสิทธิภาพสูงโดยไม่ต้องกังวลเรื่อง Edge Cases ของการคำนวณวันเดือนปีอีกต่อไป