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

Truy vấn khoảng thời gian timestamp trong MySQL

SELECT dữ liệu trong khoảng timestamp (date range)

Dùng toán tử so sánh >= và < trên cột TIMESTAMP hoặc DATETIME. Lưu ý dùng < cho mốc kết thúc (exclusive) để chính xác ranh giới ngày.

Cú pháp

SELECT * FROM tenBang
WHERE cotThoiGian >= 'ngayBatDau'
  AND cotThoiGian < 'ngayKetThucCongThem1Ngay';

Ví dụ minh họa

Tạo bảng DateRange:

CREATE TABLE DateRange (DueTime TIMESTAMP);
INSERT INTO DateRange VALUES
('2016-11-13'), ('2016-10-14'), ('2017-01-23'),
('2017-05-14'), ('2017-08-25'), ('2018-09-28'),
('2018-11-17'), ('2018-12-13'), ('2018-12-16');

Truy vấn từ 2017-05-14 đến trước 2018-12-17:

SELECT * FROM DateRange
WHERE DueTime >= '2017-05-14'
  AND DueTime < '2018-12-17';

Kết quả

+---------------------+
| DueTime             |
+---------------------+
| 2017-05-14 00:00:00 |
| 2017-08-25 00:00:00 |
| 2018-09-28 00:00:00 |
| 2018-11-17 00:00:00 |
| 2018-12-13 00:00:00 |
| 2018-12-16 00:00:00 |
+---------------------+

Trường hợp cột lưu UNIX TIMESTAMP (số nguyên)

Dùng UNIX_TIMESTAMP() chuyển đổi:

SELECT * FROM tenBang
WHERE cotUnixTs >= UNIX_TIMESTAMP('2017-05-14')
  AND cotUnixTs < UNIX_TIMESTAMP('2018-12-17');

Mẹo hiệu năng

  • Đặt index trên cột thời gian.
  • Tránh dùng hàm trên cột trong WHERE (như DATE(cot) = ...) để tận dụng index.
  • Dùng khoảng nửa mở [start, end) như ví dụ trên.