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

Tách cột DATETIME thành DATE và TIME để so sánh riêng biệt trong MySQL

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ơn CAST(... 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).