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

MySQL หาวันแรกและวันสุดท้ายของเดือนจากคอลัมน์ Date

ใช้ฟังก์ชัน 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 เดียว