คำสั่ง SQL สำหรับหาวันที่แรกและสุดท้ายของเดือนถัดไป
ใช้ฟังก์ชัน DATE_ADD(), LAST_DAY(), DATE_SUB(), DAY() ร่วมกัน
คำสั่งสมบูรณ์
SELECT
DATE_SUB(
LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)),
INTERVAL DAY(LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH))) - 1 DAY
) AS firstDayOfNextMonth,
LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)) AS lastDayOfNextMonth;
การทำงานทีละขั้นตอน
DATE_ADD(NOW(), INTERVAL 1 MONTH) → วันที่เดือนหน้า
LAST_DAY(...) → วันสุดท้ายของเดือนนั้น
DAY(LAST_DAY(...)) → จำนวนวันของเดือนนั้น (28-31)
DATE_SUB(..., INTERVAL (days-1) DAY) → ย้อนกลับไปวันที่ 1
ตัวอย่างผลลัพธ์ (สมมติวันนี้ 2019-01-15)
| firstDayOfNextMonth | lastDayOfNextMonth |
| 2019-02-01 | 2019-02-28 |
วิธีง่ายกว่า (MySQL 8.0+)
วันที่ 1 ของเดือนหน้า
SELECT DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY) AS first_day_next_month;
วันสุดท้ายของเดือนหน้า
SELECT LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)) AS last_day_next_month;
ฟังก์ชันที่เกี่ยวข้อง
| ฟังก์ชัน | คำอธิบาย |
LAST_DAY(date) | วันสุดท้ายของเดือนของ date |
DATE_ADD(date, INTERVAL n MONTH) | บวกเดือน |
DATE_SUB(date, INTERVAL n DAY) | ลบวัน |
DAY(date) | วันที่ของเดือน (1-31) |
DAYOFMONTH(date) | เหมือน DAY() |
การใช้งานใน WHERE Clause
-- ข้อมูลของเดือนหน้า
SELECT * FROM orders
WHERE order_date >= DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY)
AND order_date < DATE_ADD(LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)), INTERVAL 1 DAY);