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

Tính chênh lệch thời gian trong MySQL với INTERVAL

Để lọc các bản ghi có thời gian trong khoảng cách nhất định so với thời điểm hiện tại, dùng so sánh trực tiếp với NOW() (hoặc CURDATE()) kết hợp INTERVAL.

Ví dụ minh họa

Tạo bảng và chèn dữ liệu:

CREATE TABLE DemoTable1570 (ArrivalTime DATETIME);
INSERT INTO DemoTable1570 VALUES 
('2019-10-15 05:10:00'), ('2019-10-15 23:00:00'),
('2019-10-15 23:10:00'), ('2019-10-15 16:10:00');

Giả sử NOW() = '2019-10-15 22:26:14'.

Lọc các bản ghi ArrivalTime trong 5 giờ gần nhất (từ 17:26:14 đến 22:26:14):

SELECT * FROM DemoTable1570
WHERE ArrivalTime > NOW() - INTERVAL 5 HOUR;

Kết quả

ArrivalTime
2019-10-15 23:00:00
2019-10-15 23:10:00

→ 2 bản ghi sau 17:26:14 (5h trước NOW).

Các biến thể INTERVAL phổ biến

Cú phápÝ nghĩa
INTERVAL 1 DAY1 ngày
INTERVAL 3 HOUR3 giờ
INTERVAL 30 MINUTE30 phút
INTERVAL 6 MONTH6 tháng
INTERVAL 1 YEAR1 năm
INTERVAL '1 12' DAY_HOUR1 ngày 12 giờ (compound)

Lưu ý hiệu năng

  • NOW() được đánh giá 1 lần cho toàn bộ truy vấn.
  • Biểu thức ArrivalTime > NOW() - INTERVAL 5 HOUR có thể dùng index trên ArrivalTime (sargable).
  • Tránh dùng hàm trên cột: DATE(ArrivalTime) > ... sẽ làm mất index.

Mở rộng: Lọc theo khoảng thời gian cố định (không dùng NOW)

WHERE ArrivalTime BETWEEN '2019-10-15 17:00:00' AND '2019-10-15 22:00:00'