Giới thiệu
Khi làm việc với cột DATETIME, thường cần tách riêng phần ngày và phần giờ để lọc hoặc so sánh. MySQL hỗ trợ hàm CAST() hoặc DATE()/TIME() cho mục đích này.
Ví dụ thực hành
1. Tạo bảng DemoTable805
mysql> CREATE TABLE DemoTable805 (LoginDate DATETIME);
2. Chèn dữ liệu
mysql> INSERT INTO DemoTable805 VALUES('2019-01-31 12:45:20');
mysql> INSERT INTO DemoTable805 VALUES('2017-11-01 10:20:30');
mysql> INSERT INTO DemoTable805 VALUES('2016-03-12 04:10:00');
mysql> INSERT INTO DemoTable805 VALUES('2018-12-24 05:01:00');
3. Tách ngày và giờ với CAST()
mysql> SELECT CAST(LoginDate AS DATE), CAST(LoginDate AS TIME) FROM DemoTable805;
4. Kết quả
+-------------------------+-------------------------+
| CAST(LoginDate AS DATE) | CAST(LoginDate AS TIME) |
+-------------------------+-------------------------+
| 2019-01-31 | 12:45:20 |
| 2017-11-01 | 10:20:30 |
| 2016-03-12 | 04:10:00 |
| 2018-12-24 | 05:01:00 |
+-------------------------+-------------------------+
Cách thay thế (khuyên dùng)
-- Sử dụng hàm chuyên biệt (ngắn gọn, rõ ràng hơn)
SELECT DATE(LoginDate), TIME(LoginDate) FROM DemoTable805;
-- So sánh riêng: tìm đăng nhập sau 12:00 trong ngày 2019-01-31
SELECT * FROM DemoTable805
WHERE DATE(LoginDate) = '2019-01-31' AND TIME(LoginDate) > '12:00:00';
Lưu ý
DATE()vàTIME()là hàm chuẩn SQL, dễ đọc hơnCAST(... AS DATE/TIME).- Khi so sánh ngày, hãy dùng
DATE(col) = '2019-01-31'thay vìcol = '2019-01-31'(vì sau cùng so sánh cả giờ). - Index trên cột DATETIME vẫn hoạt động tốt với
DATE(col)trong MySQL 8.0+ (functional index).