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

Truy vấn MySQL lấy bản ghi sắp tới trong 12 giờ

Mục tiêu

Lấy các bản ghi có thời gian (datetime) rơi trong khoảng 12 giờ tới từ thời điểm hiện tại.

Công thức sử dụng

Sử dụng hàm DATE_ADD() kết hợp INTERVAL:

SELECT * FROM ten_bang
WHERE DATE_ADD(cot_thoi_gian, INTERVAL 12 HOUR)
BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 12 HOUR);

Ví dụ chi tiết

Tạo bảng DemoTable với cột DueDateTime:

CREATE TABLE DemoTable (DueDateTime DATETIME);

Chèn dữ liệu mẫu (giả sử ngày hiện tại là 2019-07-12):

INSERT INTO DemoTable VALUES
('2019-07-12 10:50:30'),
('2019-07-12 22:02:00'),
('2019-07-12 11:12:10'),
('2019-07-12 09:02:00');

Truy vấn lấy bản ghi trong 12 giờ tới:

SELECT * FROM DemoTable
WHERE DATE_ADD(DueDateTime, INTERVAL 12 HOUR)
BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 12 HOUR);

Kết quả (giả sử NOW() = '2019-07-12 10:00:00'):

+---------------------+
| DueDateTime         |
+---------------------+
| 2019-07-12 10:50:30 |
| 2019-07-12 22:02:00 |
| 2019-07-12 11:12:10 |
+---------------------+

Giải thích logic

  • DATE_ADD(DueDateTime, INTERVAL 12 HOUR): Thời điểm hết hạn + 12h.
  • BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 12 HOUR): Khoảng từ bây giờ đến 12h tới.
  • Bản ghi thỏa mãn: Thời điểm (DueDateTime + 12h) rơi trong khoảng [NOW, NOW+12h].

Cách viết thay thế (thường hiệu quả hơn)

SELECT * FROM DemoTable
WHERE DueDateTime BETWEEN DATE_SUB(NOW(), INTERVAL 12 HOUR) AND NOW();

Cách này cho phép sử dụng index trên cột DueDateTime (sargable).