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

Hiển thị ngày sau NOW() + 10 ngày từ bảng MySQL?

Giải pháp: DATE_ADD() trong WHERE

So sánh cột ngày với DATE_ADD(NOW(), INTERVAL 10 DAY).

Ví dụ minh họa

Tạo bảng

mysql> CREATE TABLE DemoTable (
    ShippingDate DATE
);

Giả sử NOW() = '2019-06-04 20:43:57'

Chèn dữ liệu

mysql> INSERT INTO DemoTable VALUES('2019-06-16');
mysql> INSERT INTO DemoTable VALUES('2019-05-31');
mysql> INSERT INTO DemoTable VALUES('2019-05-24');
mysql> INSERT INTO DemoTable VALUES('2019-06-24');

Truy vấn: Ngày > hôm nay + 10 ngày

mysql> SELECT * FROM DemoTable 
    -> WHERE ShippingDate > DATE_ADD(NOW(), INTERVAL 10 DAY);

Kết quả (ngày > 2019-06-14)

+--------------+
| ShippingDate |
+--------------+
| 2019-06-16   |
| 2019-06-24   |
+--------------+

Các biến thể INTERVAL

Cú phápÝ nghĩa
INTERVAL 10 DAY10 ngày
INTERVAL 2 WEEK2 tuần
INTERVAL 1 MONTH1 tháng
INTERVAL 1 YEAR1 năm
INTERVAL 3 HOUR3 giờ
INTERVAL '1 12' DAY_HOUR1 ngày 12 giờ

DATE_ADD vs DATE_SUB

-- Tương đương nhau
DATE_ADD(NOW(), INTERVAL 10 DAY)
DATE_SUB(NOW(), INTERVAL -10 DAY)
NOW() + INTERVAL 10 DAY  -- Toán tử + (MySQL extension)

⚠️ Lưu ý hiệu năng (QUAN TRỌNG)

-- ❌ Chậm: Hàm trên cột, không dùng index
WHERE DATE(ShippingDate) > DATE_ADD(NOW(), INTERVAL 10 DAY)

-- ✅ Nhanh: Hàm chỉ ở vế phải, dùng index ShippingDate
WHERE ShippingDate > DATE_ADD(CURDATE(), INTERVAL 10 DAY)

-- ✅ Tốt nhất cho DATE column
WHERE ShippingDate > CURDATE() + INTERVAL 10 DAY

Mở rộng: Tìm khoảng ngày

-- 10-30 ngày tới
WHERE ShippingDate BETWEEN CURDATE() + INTERVAL 10 DAY 
                       AND CURDATE() + INTERVAL 30 DAY