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

Trích xuất chỉ ngày (DATE) từ cột DATETIME/VARCHAR trong MySQL

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ỗi str theo format trả 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.