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

Lấy dữ liệu 2 ngày (hôm nay và hôm qua) từ bảng MySQL lưu timestamp dạng BIGINT

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à DATETIME thay 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.