Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Bỏ qua năm trong truy vấn MySQL với khoảng ngày?

Truy vấn theo khoảng ngày bỏ qua năm trong MySQL

Sử dụng DATE_FORMAT() kết hợp BETWEEN để so sánh chỉ phần tháng-ngày, bỏ qua năm.

Cú pháp

SELECT * FROM yourTable 
WHERE DATE_FORMAT(yourDateColumn, '%m-%d') BETWEEN 'start_mm-dd' AND 'end_mm-dd';

Ví dụ: Tìm đơn hàng giao từ 01-01 đến 03-31 (bất kỳ năm nào)

Tạo bảng:

mysql> CREATE TABLE igonreYearDemo (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> ShippingDate DATE
    -> );

Chèn dữ liệu nhiều năm:

mysql> 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');

Dữ liệu:

+----+--------------+
| Id | ShippingDate |
+----+--------------+
| 1  | 2016-01-31   |
| 2  | 2018-01-31   |
| 3  | 2015-06-23   |
| 4  | 2015-06-23   |
| 5  | 2014-02-01   |
| 6  | 2019-01-31   |
| 7  | 2019-02-14   |
| 8  | 2019-03-12   |
+----+--------------+

Truy vấn bỏ qua năm (01-01 đến 03-31):

mysql> SELECT * FROM igonreYearDemo tbl 
WHERE DATE_FORMAT(tbl.ShippingDate, '%m-%d') BETWEEN '01-01' AND '03-31';

Kết quả (6 hàng, loại bỏ 2 hàng tháng 6):

+----+--------------+
| 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   |
+----+--------------+

Lưu ý hiệu năng

  • DATE_FORMAT() không sử dụng index trên cột date
  • Với bảng lớn, cân nhắc thêm cột month_day VARCHAR(5) generated column có index
  • Hoặc dùng: WHERE MONTH(date) BETWEEN 1 AND 3 AND DAY(date) BETWEEN 1 AND 31 (cũng không dùng index)

Ứng dụng

  • Báo cáo theo mùa vụ hàng năm
  • Tìm sinh nhật trong khoảng ngày
  • Phân tích xu hướng theo mùa