Khi cột thời gian lưu dưới dạng Unix timestamp (BIGINT) (số giây từ 1970-01-01), để lọc dữ liệu của hôm nay và hôm qua, hãy chuyển ngày hiện tại sang timestamp bằng UNIX_TIMESTAMP() và so sánh khoảng.
Công thức
- Mốc đầu (00:00 hôm qua):
UNIX_TIMESTAMP(CURDATE() - INTERVAL 1 DAY) - Mốc cuối (00:00 ngày mai):
UNIX_TIMESTAMP(CURDATE() + INTERVAL 1 DAY) - Điều kiện:
cot_timestamp >= moc_dau AND cot_timestamp < moc_cuoi
Ví dụ minh họa
Tạo bảng ngày gửi hàng (timestamp):
mysql> CREATE TABLE DemoTable1495 (ShippingDate BIGINT);
mysql> INSERT INTO DemoTable1495 VALUES
-> (1570127400), (1570213800), (1570645800), (1570300200);
Giả sử hôm nay là 2019-10-06 (timestamp 1570320000).
Truy vấn lấy dữ liệu hôm qua (2019-10-05) và hôm nay (2019-10-06):
mysql> SELECT * FROM DemoTable1495
-> WHERE ShippingDate >= UNIX_TIMESTAMP(CURDATE() - INTERVAL 1 DAY)
-> AND ShippingDate < UNIX_TIMESTAMP(CURDATE() + INTERVAL 1 DAY);
Kết quả (2 bản ghi rơi vào khoảng 2019-10-05 00:00:00 → 2019-10-07 00:00:00):
+--------------+ | ShippingDate | +--------------+ | 1570213800 | | 1570300200 | +--------------+
Lưu ý
- Dùng
>=cho mốc đầu,<cho mốc cuối (half-open interval) để tránh trùng lặp ranh giới. - Nếu cột là
DATETIMEthay vì BIGINT, so sánh trực tiếp:WHERE cot_datetime >= CURDATE() - INTERVAL 1 DAY AND cot_datetime < CURDATE() + INTERVAL 1 DAY. - Để hiệu quả, hãy tạo index trên cột timestamp.