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

Lấy dữ liệu của hôm nay và hôm qua trong MySQL

Để 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à DATETIME có phần giờ, so sánh trực tiếp với CURDATE() (chỉ có ngày) có thể bỏ sót dữ liệu. Hãy dùng DATE(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)