ฟังก์ชัน SUBDATE() ใช้เพื่อลบจำนวนวัน หรือช่วงเวลา (interval) ออกจากวันที่ (DATE, DATETIME) ที่กำหนด เหมาะสำหรับการคำนวณวันก่อนหน้า เช่น หาวันก่อนครบกำหนด, ย้อนกลับไป n วัน
ประโยชน์ของฟังก์ชัน SUBDATE()
- คำนวณวันที่ย้อนหลัง เช่น 7 วันก่อนหน้า, 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 MONTHunitที่สามารถใช้ได้คือ- 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;