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

MySQL Query: ข้ามปีในการค้นหาช่วงวันที่

ค้นหาช่วงวันที่โดยไม่สนใจปี (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