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.