Tóm tắt
Dùng CONCAT(date_col, ' ', time_col) hoặc TIMESTAMP(date_col, time_col) để ghép thành DATETIME rồi so sánh.
Cú pháp
SELECT * FROM bang
WHERE CONCAT(date_col, ' ', time_col) > '2007-01-31 12:30:30';
-- Hoặc chuẩn hơn:
WHERE TIMESTAMP(date_col, time_col) > '2007-01-31 12:30:30';
Ví dụ
1. Tạo bảng tách ngày/giờ
CREATE TABLE DifferentDateTime (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ArrivalDate DATE,
ArrivalTime TIME
);
2. Dữ liệu
INSERT INTO DifferentDateTime (ArrivalDate, ArrivalTime) VALUES
(CURDATE(), '10:27:30'),
('2016-04-24', '15:00:00'),
('2015-12-25', '12:30:30'),
('2012-01-31', '16:00:30'),
('2000-07-12', '09:45:31');
3. So sánh với DATETIME
SELECT * FROM DifferentDateTime
WHERE CONCAT(ArrivalDate, ' ', ArrivalTime) > '2007-01-31 12:30:30';
4. Kết quả (giả sử hôm nay 2019-02-14)
+----+-------------+-------------+
| Id | ArrivalDate | ArrivalTime |
+----+-------------+-------------+
| 1 | 2019-02-14 | 10:27:30 |
| 2 | 2016-04-24 | 15:00:00 |
| 3 | 2015-12-25 | 12:30:30 |
| 4 | 2012-01-31 | 16:00:30 |
+----+-------------+-------------+
TIMESTAMP() vs CONCAT()
| Hàm | Ưu điểm | Nhược điểm |
|---|---|---|
| TIMESTAMP(d, t) | Chuẩn SQL, trả về DATETIME, tối ưu index | Yêu cầu cột DATE và TIME riêng biệt |
| CONCAT(d, ' ', t) | Linh hoạt, dùng cho chuỗi bất kỳ | Trả về VARCHAR, có thể không dùng index |
Khuyến nghị
- Dùng
TIMESTAMP(date_col, time_col)cho truy vấn thường xuyên – có thể dùng index trên (date_col, time_col). - Nếu có thể, lưu trữ trực tiếp
DATETIMEhoặcTIMESTAMPthay vì tách 2 cột.