กรองข้อมูลตามเดือนและปีด้วย YEAR() และ MONTH()
ใช้ฟังก์ชัน YEAR(date) และ MONTH(date) ดึงส่วนปีและเดือนมาเปรียบเทียบ
รูปแบบคำสั่ง (Syntax)
SELECT * FROM yourTableName
WHERE YEAR(yourDateColumn) = year_value
AND MONTH(yourDateColumn) = month_value;
ตัวอย่างการใช้งาน
สร้างตาราง selectDataOnYearandMonthDemo:
CREATE TABLE selectDataOnYearandMonthDemo (
BookId INT,
BookName VARCHAR(100),
BookDueDate DATETIME
);
ข้อมูล:
| BookId | BookName | BookDueDate |
|---|---|---|
| 101 | C in Depth | 2017-12-05 21:44:20 |
| 102 | Let us C | 2019-12-05 00:00:00 |
| 103 | SCJP Java | 2018-12-05 00:00:00 |
| 104 | Introduction to C++ | 2016-04-05 00:00:00 |
ค้นหาหนังสือที่ครบกำหนด เดือน 12 ปี 2019:
SELECT * FROM selectDataOnYearandMonthDemo
WHERE YEAR(BookDueDate) = 2019
AND MONTH(BookDueDate) = 12;
ผลลัพธ์:
| BookId | BookName | BookDueDate |
|---|---|---|
| 102 | Let us C | 2019-12-05 00:00:00 |
ข้อควรระวังด้านประสิทธิภาพ
เหมือนกับ DATE() การใช้ YEAR() และ MONTH() บนคอลัมน์ จะทำให้ Index ไม่ถูกใช้งาน
วิธีแก้ (Range Query):
SELECT * FROM selectDataOnYearandMonthDemo
WHERE BookDueDate >= '2019-12-01 00:00:00'
AND BookDueDate < '2020-01-01 00:00:00';
วิธีนี้ใช้ Index บน BookDueDate ได้ และเร็วกว่ามากสำหรับตารางใหญ่