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

Lấy bản ghi 2 ngày gần nhất từ ngày hiện tại trong MySQL

Tóm tắt

Dùng DATE_SUB(DATE(NOW()), INTERVAL n DAY) để tính ngày n ngày trước, kết hợp BETWEEN lọc khoảng.

Cú pháp

SELECT * FROM bang
WHERE cot_datetime BETWEEN DATE_SUB(DATE(NOW()), INTERVAL 2 DAY)
                       AND DATE_SUB(DATE(NOW()), INTERVAL 1 DAY);

Lấy bản ghi từ 2 ngày trước đến 1 ngày trước (không bao gồm hôm nay).

Ví dụ

1. Tạo bảng

CREATE TABLE get2daysAgoDemo (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR(20),
    PostDateTime DATETIME
);

2. Dữ liệu (giả sử hôm nay 2019-02-15)

INSERT INTO get2daysAgoDemo (Name, PostDateTime) VALUES
('Larry', NOW()),           -- 2019-02-15
('Mike', '2019-02-13'),     -- 2 ngày trước
('Sam', '2019-01-31'),      -- cũ
('Bob', '2019-02-14'),      -- 1 ngày trước
('David', '2019-02-12'),    -- 3 ngày trước
('Carol', '2019-02-11');    -- 4 ngày trước

3. Truy vấn

SELECT * FROM get2daysAgoDemo
WHERE PostDateTime BETWEEN DATE_SUB(DATE(NOW()), INTERVAL 2 DAY)
                       AND DATE_SUB(DATE(NOW()), INTERVAL 1 DAY);

4. Kết quả (2019-02-13 và 2019-02-14)

+----+------+---------------------+
| Id | Name | PostDateTime        |
+----+------+---------------------+
| 2  | Mike | 2019-02-13 00:00:00 |
| 4  | Bob  | 2019-02-14 00:00:00 |
+----+------+---------------------+

Biến thể thường dùng

Mục đíchWHERE
7 ngày qua (bao gồm hôm nay)WHERE dt >= DATE_SUB(CURDATE(), INTERVAL 6 DAY)
30 ngày quaWHERE dt >= DATE_SUB(CURDATE(), INTERVAL 29 DAY)
Tháng nàyWHERE dt >= DATE_FORMAT(NOW(), '%Y-%m-01')
Tuần này (Thứ 2 - CN)WHERE dt >= DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY)

Lưu ý

  • DATE(NOW()) lấy phần ngày (bỏ giờ) – so sánh chính xác ngày.
  • Nếu cột là DATETIME, BETWEEN '2019-02-13' AND '2019-02-14' ngụ ý '2019-02-13 00:00:00' đến '2019-02-14 00:00:00' – **bỏ lỡ giờ trong ngày 14**. Khuyến nghị dùng >= start AND < end_of_next_day.
  • Chuẩn hơn: WHERE dt >= DATE_SUB(CURDATE(), INTERVAL 2 DAY) AND dt < DATE_SUB(CURDATE(), INTERVAL 1 DAY).