Tính ngày hôm qua (yesterday) từ cột DATETIME
Dùng hàm SUBDATE(date, INTERVAL 1 DAY) hoặc DATE_SUB(date, INTERVAL 1 DAY) (tương đương).
Cú pháp
SELECT SUBDATE(cotThoiGian, INTERVAL 1 DAY) AS NgayHomQua
FROM tenBang;
Ví dụ minh họa
Bảng YesterdayDateDemo:
CREATE TABLE YesterdayDateDemo (VisitedDateTime DATETIME);
INSERT INTO YesterdayDateDemo VALUES
(NOW()), ('2012-12-26 13:24:35'), ('2013-10-22 12:20:32');
Giả sử NOW() = '2018-12-18 14:22:48'.
Truy vấn:
SELECT SUBDATE(VisitedDateTime, INTERVAL 1 DAY) AS YesterdayDate
FROM YesterdayDateDemo;
Kết quả
+---------------------+
| YesterdayDate |
+---------------------+
| 2018-12-17 14:22:48 |
| 2012-12-25 13:24:35 |
| 2013-10-21 12:20:32 |
+---------------------+
(Ví dụ gốc chỉ hiển thị 1 dòng do bản ghi NOW() là hôm nay, 2 bản ghi cũ không được lọc - đây là hành vi bình thường của SELECT không WHERE).
Các biến thể hữu ích
SUBDATE(cot, 1): Mặc định trừ 1 ngày (ngắn gọn).DATE_SUB(cot, INTERVAL 1 DAY): Cú pháp chuẩn SQL.DATE(cot) - INTERVAL 1 DAY: MySQL cho phép phép trừ trên DATE.SUBDATE(cot, INTERVAL 1 MONTH),YEAR,HOUR,MINUTE...
Lọc bản ghi "hôm qua" (so với hôm nay)
SELECT * FROM bang
WHERE DATE(cotThoiGian) = SUBDATE(CURDATE(), 1);
Hoặc tối ưu index:
WHERE cotThoiGian >= SUBDATE(CURDATE(), 1)
AND cotThoiGian < CURDATE()