Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีหาวันที่แรกและวันสุดท้ายของเดือนหน้าใน MySQL

คำสั่ง 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;

การทำงานทีละขั้นตอน

  1. DATE_ADD(NOW(), INTERVAL 1 MONTH) → วันที่เดือนหน้า
  2. LAST_DAY(...) → วันสุดท้ายของเดือนนั้น
  3. DAY(LAST_DAY(...)) → จำนวนวันของเดือนนั้น (28-31)
  4. DATE_SUB(..., INTERVAL (days-1) DAY) → ย้อนกลับไปวันที่ 1

ตัวอย่างผลลัพธ์ (สมมติวันนี้ 2019-01-15)

firstDayOfNextMonthlastDayOfNextMonth
2019-02-012019-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);