ใน MySQL ข้อมูลประเภทวันที่ เช่น DATE, DATETIME, TIMESTAMP ฯลฯ ถูกใช้สำหรับเก็บข้อมูลเกี่ยวกับวันและเวลา เช่น วันที่สมัคร, วันเกิด, เวลาสั่งซื้อ เป็นต้น MySQL มีฟังก์ชันที่หลากหลายสำหรับจัดการกับข้อมูลประเภทนี้ เช่น การเพิ่ม-ลดวัน, การเปรียบเทียบช่วงเวลา, การแปลงรูปแบบ และการดึงเฉพาะส่วนของวันที่ออกมา ซึ่งช่วยให้สามารถประมวลผลข้อมูลเชิงเวลาได้อย่างมีประสิทธิภาพและยืดหยุ่น
ประเภทข้อมูลเกี่ยวกับวันที่ใน MySQL
DATEเก็บแค่วันที่ (เช่น2025-04-02)DATETIMEเก็บวันที่และเวลา (เช่น2025-04-02 13:45:00)TIMESTAMPเหมือนDATETIMEแต่ใช้ค่าแบบ UNIX TimestampTIMEเก็บเฉพาะเวลา (เช่น13:45:00)YEARเก็บเฉพาะปี (เช่น2025)
ฟังก์ชันที่นิยมใช้จัดการข้อมูลวันที่
ดึงวันที่ปัจจุบัน
SQL
SELECT CURDATE(); -- ผลลัพธ์: 2025-04-02
SELECT CURRENT_DATE();ดึงวันและเวลาปัจจุบัน
SQL
SELECT NOW(); -- ผลลัพธ์: 2025-04-02 13:45:00
SELECT CURRENT_TIMESTAMP();ดึงเฉพาะปี/เดือน/วัน จากคอลัมน์วันที่
SQL
SELECT YEAR(order_date), MONTH(order_date), DAY(order_date)
FROM orders;- ใช้แยกปี/เดือน/วันออกมาจากคอลัมน์ที่เป็น
DATEหรือDATETIME
ตัวอย่างการใช้งาน
เลือกข้อมูลตามวันที่
SQL
SELECT * FROM orders
WHERE order_date = '2025-04-02';เลือกข้อมูลในช่วงวันที่
SQL
SELECT * FROM orders
WHERE order_date BETWEEN '2025-04-01' AND '2025-04-30';การเพิ่ม/ลบวันที่
เพิ่มวัน/เดือน/ปี
SQL
SELECT DATE_ADD('2025-04-02', INTERVAL 7 DAY); -- เพิ่ม 7 วัน
SELECT DATE_ADD('2025-04-02', INTERVAL 1 MONTH); -- เพิ่ม 1 เดือนลบวัน/เดือน/ปี
SQL
SELECT DATE_SUB('2025-04-02', INTERVAL 10 DAY); -- ลบ 10 วันการจัดรูปแบบวันที่ (Format)
SQL
SELECT DATE_FORMAT(NOW(), '%d/%m/%Y'); -- ผลลัพธ์: 02/04/2025%d= วัน,%m= เดือน,%Y= ปี (เต็ม 4 หลัก)
ตัวอย่างการใช้งานจริง
แสดงรายการสั่งซื้อภายใน 30 วันที่ผ่านมา
SQL
SELECT * FROM orders
WHERE order_date >= CURDATE() - INTERVAL 30 DAY;ตรวจสอบวันเกิดลูกค้าที่เกิดวันนี้
SQL
SELECT * FROM customers
WHERE MONTH(birth_date) = MONTH(CURDATE())
AND DAY(birth_date) = DAY(CURDATE());หมายเหตุ:
- รูปแบบวันที่มาตรฐานใน MySQL คือ
'YYYY-MM-DD' - หลีกเลี่ยงการใช้รูปแบบ
'DD/MM/YYYY'ตรง ๆ หากยังไม่ได้แปลงด้วยSTR_TO_DATE() - การเปรียบเทียบวันที่ควรใช้
DATE()หรือแปลงค่าก่อนเทียบกับDATETIME