Vấn đề: Truy vấn hàng có ShippingDate là hôm nay hoặc ngày mai
Cần lấy CustomerName cho các đơn hàng ship hôm nay (CURDATE()) hoặc ngày mai (CURDATE() + INTERVAL 1 DAY).
Giải pháp: WHERE ... IN (CURDATE(), CURDATE() + INTERVAL 1 DAY)
1. Lấy ngày hiện tại
SELECT CURDATE(); -- Ví dụ: 2019-12-15
2. Tạo bảng và dữ liệu
CREATE TABLE DemoTable (
ProductId INT,
ProductName VARCHAR(20),
CustomerName VARCHAR(20),
ShippingDate DATE
);
INSERT INTO DemoTable VALUES
(101, 'Product-1', 'Sam', '2019-10-11'),
(102, 'Product-2', 'Carol', '2018-12-01'),
(103, 'Product-3', 'David', '2019-12-15'), -- Hôm nay
(104, 'Product-4', 'Robert', '2019-12-16'); -- Ngày mai
3. Truy vấn
SELECT CustomerName
FROM DemoTable
WHERE ShippingDate IN (CURDATE(), CURDATE() + INTERVAL 1 DAY);
4. Kết quả (giả sử hôm nay 2019-12-15)
+--------------+
| CustomerName |
+--------------+
| David |
| Robert |
+--------------+
Giải thích
CURDATE()– Trả về ngày hiện tại (DATE, không có thời gian).CURDATE() + INTERVAL 1 DAY– Cộng 1 ngày (DATE arithmetic).IN (val1, val2)– Khớp nếu ShippingDate bằng một trong hai giá trị.
Mở rộng: Khoảng ngày (Range)
WHERE ShippingDate >= CURDATE()
AND ShippingDate < CURDATE() + INTERVAL 2 DAY
Tương đương nhưng hiệu quả hơn với index (range scan).
Lưu ý múi giờ
CURDATE()dùng múi giờ của server MySQL.- Nếu ứng dụng đa múi giờ, cân nhắc lưu
DATETIMEUTC và chuyển đổi ở application layer.