MySQL การทำงานกับข้อมูลประเภท Date

ใน MySQL ข้อมูลประเภทวันที่ เช่น DATE, DATETIME, TIMESTAMP ฯลฯ ถูกใช้สำหรับเก็บข้อมูลเกี่ยวกับวันและเวลา เช่น วันที่สมัคร, วันเกิด, เวลาสั่งซื้อ เป็นต้น MySQL มีฟังก์ชันที่หลากหลายสำหรับจัดการกับข้อมูลประเภทนี้ เช่น การเพิ่ม-ลดวัน, การเปรียบเทียบช่วงเวลา, การแปลงรูปแบบ และการดึงเฉพาะส่วนของวันที่ออกมา ซึ่งช่วยให้สามารถประมวลผลข้อมูลเชิงเวลาได้อย่างมีประสิทธิภาพและยืดหยุ่น

ประเภทข้อมูลเกี่ยวกับวันที่ใน MySQL

  • DATE เก็บแค่วันที่ (เช่น 2025-04-02)
  • DATETIME เก็บวันที่และเวลา (เช่น 2025-04-02 13:45:00)
  • TIMESTAMP เหมือน DATETIME แต่ใช้ค่าแบบ UNIX Timestamp
  • TIME เก็บเฉพาะเวลา (เช่น 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
แชร์เรื่องนี้