กรองวันที่ด้วย YEAR() และ MONTH() หรือ Range Query
ใช้ฟังก์ชัน YEAR() และ MONTH() ดึงส่วนปี/เดือนจากคอลัมน์ DATETIME/DATE มาเปรียบเทียบ
ตัวอย่างสร้างตารางและข้อมูล
CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ShippingDate DATETIME
);
INSERT INTO DemoTable (ShippingDate) VALUES
('2019-01-31'), ('2018-12-01'), ('2019-06-02'), ('2019-11-18');
ข้อมูลในตาราง
+----+-----------------------+ | Id | ShippingDate | +----+-----------------------+ | 1 | 2019-01-31 00:00:00 | | 2 | 2018-12-01 00:00:00 | | 3 | 2019-06-02 00:00:00 | | 4 | 2019-11-18 00:00:00 | +----+-----------------------+
คำสั่งดึงข้อมูลเดือนมิถุนายน ปี 2019
SELECT * FROM DemoTable WHERE YEAR(ShippingDate) = 2019 AND MONTH(ShippingDate) = 6;
ผลลัพธ์
+----+-----------------------+ | Id | ShippingDate | +----+-----------------------+ | 3 | 2019-06-02 00:00:00 | +----+-----------------------+
คำอธิบาย: YEAR() คืนปี (2019), MONTH() คืนเดือน (6) เปรียบเทียบกับตัวเลข
⚡ วิธีที่มีประสิทธิภาพมากกว่า (ใช้ Index ได้):
SELECT * FROM DemoTable WHERE ShippingDate >= '2019-06-01' AND ShippingDate < '2019-07-01';
วิธีนี้ไม่ใช้ Function บนคอลัมน์ → MySQL ใช้ Index Range Scan ได้ → เร็วมากบนตารางใหญ่
ฟังก์ชันวันที่เกี่ยวข้อง: DAY(), HOUR(), MINUTE(), SECOND(), QUARTER(), WEEK(), DATE_FORMAT(date, '%Y-%m') (Format เป็นสตริง)