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

Kết hợp cột DATE và TIME để so sánh với DATETIME trong MySQL

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ểmNhược điểm
TIMESTAMP(d, t)Chuẩn SQL, trả về DATETIME, tối ưu indexYê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 DATETIME hoặc TIMESTAMP thay vì tách 2 cột.