Khi cột lưu ngày giờ dưới dạng chuỗi văn bản (VARCHAR) hoặc kiểu DATETIME, bạn muốn lấy phần ngày (bỏ giờ). MySQL cung cấp DATE() cho kiểu ngày/giờ, và STR_TO_DATE() + DATE_FORMAT() cho chuỗi văn bản có định dạng tùy chỉnh.
Truy xuất ngày từ kiểu DATETIME/TIMESTAMP (Đơn giản)
SELECT DATE(datetime_column) FROM table_name;
Trả về kiểu DATE (YYYY-MM-DD).
Trường hợp phức tạp: Cột VARCHAR định dạng 'HH:MM AM/PM MM/DD/YYYY'
Dữ liệu: '04:58 PM 10/31/2018'. Cần parse thành DATE rồi format ra MM/DD/YYYY.
Tạo bảng và dữ liệu
mysql> CREATE TABLE DemoTable (ShippingDate VARCHAR(200));
mysql> INSERT INTO DemoTable VALUES
('04:58 PM 10/31/2018'),
('02:30 AM 01/01/2019'),
('12:01 AM 05/03/2019');
Truy vấn: Parse chuỗi -> DATE -> Format MM/DD/YYYY
mysql> SELECT DATE_FORMAT(
STR_TO_DATE(ShippingDate, '%h:%i %p %m/%d/%Y'),
'%m/%d/%Y'
) FROM DemoTable;
Kết quả
+-------------------------------------------------------------------------+
| DATE_FORMAT(STR_TO_DATE(ShippingDate, '%h:%i %p %m/%d/%Y'), '%m/%d/%Y') |
+-------------------------------------------------------------------------+
| 10/31/2018 |
| 01/01/2019 |
| 05/03/2019 |
+-------------------------------------------------------------------------+
Giải thích
STR_TO_DATE(str, format): Parse chuỗistrtheoformattrả về giá trịDATETIME.%h: Giờ 12h (01-12),%i: Phút,%p: AM/PM,%m: Tháng,%d: Ngày,%Y: Năm 4 chữ số.DATE_FORMAT(date, format): Format giá trị DATE/DATETIME thành chuỗi theo format mới.
Best Practice
Nên lưu trữ ngày giờ bằng kiểu dữ liệu gốc (DATE, DATETIME, TIMESTAMP) thay vì VARCHAR để tận dụng index, hàm ngày giờ tự nhiên, tránh parse phức tạp và lỗi dữ liệu.