ค้นหาช่วงวันที่โดยไม่สนใจปี (Month-Day Only)
ใช้ DATE_FORMAT() ดึงเฉพาะ เดือน-วัน แล้วเปรียบเทียบด้วย BETWEEN
ไวยากรณ์
SELECT * FROM yourTable WHERE DATE_FORMAT(dateColumn, '%m-%d') BETWEEN 'start_month-day' AND 'end_month-day';
ตัวอย่าง: หาวันที่ 1 มกราคม - 31 มีนาคม ทุกปี
CREATE TABLE igonreYearDemo (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ShippingDate DATE
);
INSERT INTO igonreYearDemo(ShippingDate) VALUES
('2016-01-31'), ('2018-01-31'), ('2015-06-23'), ('2015-06-23'),
('2014-02-01'), ('2019-01-31'), ('2019-02-14'), ('2019-03-12');
คำสั่ง Query
SELECT * FROM igonreYearDemo WHERE DATE_FORMAT(ShippingDate, '%m-%d') BETWEEN '01-01' AND '03-31';
ผลลัพธ์
+----+--------------+ | Id | ShippingDate | +----+--------------+ | 1 | 2016-01-31 | | 2 | 2018-01-31 | | 5 | 2014-02-01 | | 6 | 2019-01-31 | | 7 | 2019-02-14 | | 8 | 2019-03-12 | +----+--------------+
ข้ามวันที่ 2015-06-23 (มิถุนายน) ออกไป
ข้อควรระวัง
- ไม่สามารถใช้ Index บนคอลัมน์วันที่ได้ (Function บนคอลัมน์)
- เหมาะกับตารางเล็กหรือรายงานประจำปี
- สำหรับตารางใหญ่ ควรสร้าง Generated Column + Index