MySQL การใช้งานฟังก์ชัน SUBDATE()

ฟังก์ชัน SUBDATE() ใช้เพื่อลบจำนวนวัน หรือช่วงเวลา (interval) ออกจากวันที่ (DATE, DATETIME) ที่กำหนด เหมาะสำหรับการคำนวณวันก่อนหน้า เช่น หาวันก่อนครบกำหนด, ย้อนกลับไป n วัน

ประโยชน์ของฟังก์ชัน SUBDATE()

  1. คำนวณวันที่ย้อนหลัง เช่น 7 วันก่อนหน้า, 3 เดือนก่อนหน้า
  2. ใช้หาวันหมดอายุ, วันก่อนกำหนดส่ง, วันก่อนการแจ้งเตือน
  3. ใช้ในการวิเคราะห์ข้อมูลที่เกิดในช่วงก่อนหน้า

รูปแบบการใช้งาน

แบบที่ 1 ลบจำนวนวันออกจากวันที่

SUBDATE(date, number_of_days)

แบบที่ 2 ลบช่วงเวลาแบบกำหนดรูปแบบ (INTERVAL)

SUBDATE(date, INTERVAL expr unit)
  • date คือวันที่หรือวันเวลา เช่น '2025-04-10'
  • number_of_days คือจำนวนวันที่จะลบ (ใช้ได้เฉพาะแบบที่ 1)
  • INTERVAL expr unit คือจำนวนและหน่วยของช่วงเวลาที่จะลบ เช่น INTERVAL 2 MONTH
  • unit ที่สามารถใช้ได้คือ
    • MICROSECOND
    • SECOND
    • MINUTE
    • HOUR
    • DAY
    • WEEK
    • MONTH
    • QUARTER
    • YEAR
    • SECOND_MICROSECOND
    • MINUTE_MICROSECOND
    • MINUTE_SECOND
    • HOUR_MICROSECOND
    • HOUR_SECOND
    • HOUR_MINUTE
    • DAY_MICROSECOND
    • DAY_SECOND
    • DAY_MINUTE
    • DAY_HOUR
    • YEAR_MONTH

ตัวอย่างการใช้งาน

ลบ 7 วันจากวันที่กำหนด

SQL
SELECT SUBDATE('2025-04-10', 7) AS result;
-- ผลลัพธ์: 2025-04-03

ลบ 2 เดือนออกจากวันปัจจุบัน

SQL
SELECT SUBDATE(CURDATE(), INTERVAL 2 MONTH) AS result;
-- เช่นผลลัพธ์: 2025-02-10

ลบ 90 วันจาก order_date

SQL
SELECT order_id, order_date,
       SUBDATE(order_date, 90) AS ninety_days_before
FROM orders;

กรองข้อมูลที่เกิดขึ้นภายใน 30 วันย้อนหลัง

SQL
SELECT *
FROM logs
WHERE log_date >= SUBDATE(CURDATE(), INTERVAL 30 DAY);

หาวันเตือนก่อนหมดอายุ 1 สัปดาห์

SQL
SELECT product_id, expire_date,
       SUBDATE(expire_date, INTERVAL 7 DAY) AS remind_date
FROM products;
แชร์เรื่องนี้