Để truy vấn các bản ghi có ngày là hôm nay hoặc hôm qua, bạn kết hợp CURDATE() (ngày hiện tại) với DATE_SUB(CURDATE(), INTERVAL 1 DAY) (ngày hôm qua).
Cú pháp
SELECT * FROM ten_bang
WHERE ten_cot_ngay = CURDATE()
OR ten_cot_ngay = DATE_SUB(CURDATE(), INTERVAL 1 DAY);
Ví dụ minh họa
1. Tạo bảng
CREATE TABLE ProductDemo (
Id INT NOT NULL AUTO_INCREMENT,
ProductName VARCHAR(20),
ProductOfferDate DATETIME,
PRIMARY KEY(Id)
);
2. Chèn dữ liệu (giả sử hôm nay là 2019-01-15)
INSERT INTO ProductDemo(ProductName, ProductOfferDate) VALUES('Product-11', '2017-05-21');
INSERT INTO ProductDemo(ProductName, ProductOfferDate) VALUES('Product-22', '2019-01-15'); -- Hôm nay
INSERT INTO ProductDemo(ProductName, ProductOfferDate) VALUES('Product-21', '2019-01-14'); -- Hôm qua
INSERT INTO ProductDemo(ProductName, ProductOfferDate) VALUES('Product-91', '2018-10-23');
INSERT INTO ProductDemo(ProductName, ProductOfferDate) VALUES('Product-133', '2019-01-24');
3. Xem toàn bộ dữ liệu
SELECT * FROM ProductDemo;
Kết quả:
+----+-------------+---------------------+
| Id | ProductName | ProductOfferDate |
+----+-------------+---------------------+
| 1 | Product-11 | 2017-05-21 00:00:00 |
| 2 | Product-22 | 2019-01-15 00:00:00 |
| 3 | Product-21 | 2019-01-14 00:00:00 |
| 4 | Product-91 | 2018-10-23 00:00:00 |
| 5 | Product-133 | 2019-01-24 00:00:00 |
+----+-------------+---------------------+
4. Truy vấn: Lấy sản phẩm của hôm nay và hôm qua
SELECT * FROM ProductDemo
WHERE ProductOfferDate = CURDATE()
OR ProductOfferDate = DATE_SUB(CURDATE(), INTERVAL 1 DAY);
Kết quả:
+----+-------------+---------------------+
| Id | ProductName | ProductOfferDate |
+----+-------------+---------------------+
| 2 | Product-22 | 2019-01-15 00:00:00 |
| 3 | Product-21 | 2019-01-14 00:00:00 |
+----+-------------+---------------------+
Các cách viết tương đương
Cách 1: Dùng IN
SELECT * FROM ProductDemo
WHERE ProductOfferDate IN (CURDATE(), DATE_SUB(CURDATE(), INTERVAL 1 DAY));
Cách 2: Dùng BETWEEN (nếu cột là DATE)
SELECT * FROM ProductDemo
WHERE DATE(ProductOfferDate) BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND CURDATE();
Cách 3: Mở rộng - 7 ngày gần nhất
SELECT * FROM ProductDemo
WHERE ProductOfferDate >= DATE_SUB(CURDATE(), INTERVAL 7 DAY);
Lưu ý quan trọng
- Nếu cột là
DATETIMEcó phần giờ, so sánh trực tiếp vớiCURDATE()(chỉ có ngày) có thể bỏ sót dữ liệu. Hãy dùngDATE(ten_cot)hoặc so sánh khoảng. - Để tận dụng index, viết:
WHERE ten_cot >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND ten_cot < DATE_ADD(CURDATE(), INTERVAL 1 DAY)