ใช้ฟังก์ชัน DATE_FORMAT() สำหรับวันแรก และ LAST_DAY() สำหรับวันสุดท้ายของเดือน
ตัวอย่างการใช้งาน
1. สร้างตาราง
mysql> CREATE TABLE DemoTable (
DueDate DATE
);
Query OK, 0 rows affected (0.73 sec)
2. เพิ่มข้อมูล
mysql> INSERT INTO DemoTable VALUES('2019-01-11');
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO DemoTable VALUES('2019-04-19');
Query OK, 1 row affected (0.14 sec)
3. แสดงข้อมูลเดิม
mysql> SELECT * FROM DemoTable; +------------+ | DueDate | +------------+ | 2019-01-11 | | 2019-04-19 | +------------+
4. Query หาวันแรกและวันสุดท้ายของเดือน
mysql> SELECT
DATE_FORMAT(DueDate, '%Y-%m-01') AS FirstDayOfMonth,
LAST_DAY(DueDate) AS LastDayOfMonth
FROM DemoTable;
5. ผลลัพธ์
+-----------------+----------------+ | FirstDayOfMonth | LastDayOfMonth | +-----------------+----------------+ | 2019-01-01 | 2019-01-31 | | 2019-04-01 | 2019-04-30 | +-----------------+----------------+
คำอธิบายฟังก์ชัน
| ฟังก์ชัน | คำอธิบาย | ตัวอย่าง |
|---|---|---|
DATE_FORMAT(date, '%Y-%m-01') | จัดรูปแบบวันที่ ตั้งวันที่เป็น 01 (วันแรกของเดือน) | '2019-01-11' → '2019-01-01' |
LAST_DAY(date) | คืนวันสุดท้ายของเดือนอัตโนมัติ (รองรับ ปีอธิกสุรทิน) | '2019-02-15' → '2019-02-28' |
วิธีอื่น: ใช้ DATE_SUB และ INTERVAL
-- วันแรกของเดือน SELECT DATE_SUB(DueDate, INTERVAL DAY(DueDate)-1 DAY) AS FirstDay FROM DemoTable; -- วันสุดท้ายของเดือน (MySQL 8.0+) SELECT DATE_ADD(LAST_DAY(DueDate), INTERVAL 0 DAY) AS LastDay FROM DemoTable;
การประยุกต์: หาช่วงวันที่ของเดือนปัจจุบัน
SELECT
DATE_FORMAT(CURDATE(), '%Y-%m-01') AS MonthStart,
LAST_DAY(CURDATE()) AS MonthEnd;
สรุป
DATE_FORMAT(date, '%Y-%m-01') หาวันแรกง่ายที่สุด LAST_DAY(date) หาวันสุดท้ายแม่นยำรองรับทุกเดือนและปีอธิกสุรทิน ใช้ร่วมกันได้ใน SELECT เดียว