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

Chọn các hàng có ngày cũ hơn ngày hiện tại trong MySQL

Giới thiệu

Sử dụng toán tử so sánh < với hàm NOW() (hoặc CURDATE() cho cột DATE) để lọc các bản ghi có ngày/giờ trong quá khứ so với thời điểm hiện tại.

Ví dụ thực hành

1. Tạo bảng DemoTable840

mysql> CREATE TABLE DemoTable840 (DueDate DATETIME);

2. Chèn dữ liệu (giả sử hôm nay 2019-08-03)

mysql> INSERT INTO DemoTable840 VALUES
    ('2019-08-09'),('2019-07-05'),('2019-08-10'),('2019-07-13');

3. Truy vấn các hàng DueDate < NOW()

mysql> SELECT * FROM DemoTable840 WHERE DueDate < NOW();

4. Kết quả (các ngày đã qua: 07-05, 07-13)

+-----------------------+
| DueDate               |
+-----------------------+
| 2019-07-05 00:00:00   |
| 2019-07-13 00:00:00   |
+-----------------------+

Các biến thể thường dùng

-- Chỉ so sánh ngày (bỏ qua giờ) - dùng CURDATE()
SELECT * FROM DemoTable840 WHERE DATE(DueDate) < CURDATE();

-- Hôm nay và quá khứ (<=)
SELECT * FROM DemoTable840 WHERE DueDate <= NOW();

-- Tương lai (> NOW())
SELECT * FROM DemoTable840 WHERE DueDate > NOW();

-- Trong vòng 7 ngày tới
SELECT * FROM DemoTable840 
WHERE DueDate BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY);

Lưu ý hiệu suất

  • Tránh dùng hàm trên cột trong WHERE: DATE(DueDate) < CURDATE() làm mất index trên DueDate.
  • Viết lại: DueDate < CURDATE() (nếu cột là DATE) hoặc DueDate < DATE(NOW()) (nếu cột DATETIME).
  • Tạo index cho cột ngày thường xuyên lọc: INDEX idx_due (DueDate).