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

Thay đổi định dạng ngày với MySQL STR_TO_DATE

Chuyển đổi định dạng ngày chuỗi sang DATE/DATETIME với STR_TO_DATE

Hàm STR_TO_DATE() chuyển chuỗi ngày tháng theo định dạng chỉ định thành giá trị DATE hoặc DATETIME, cho phép so sánh, sắp xếp, tính toán chính xác.

Cú pháp

STR_TO_DATE(chuoi_ngay, dinh_dang_nguon)

Ví dụ minh họa

Tạo bảng DemoTable lưu ngày dạng chuỗi MM-DD-YYYY HH:MM:SS:

mysql> CREATE TABLE DemoTable (DueDate VARCHAR(100));
Query OK, 0 rows affected (0.78 sec)

Chèn dữ liệu:

mysql> INSERT INTO DemoTable VALUES('10-01-2019 10:19:20');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable VALUES('12-03-2018 11:00:00');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable VALUES('02-23-2018 04:20:40');
Query OK, 1 row affected (0.19 sec)

Xem dữ liệu gốc:

mysql> SELECT * FROM DemoTable;
+---------------------+
| DueDate             |
+---------------------+
| 10-01-2019 10:19:20 |
| 12-03-2018 11:00:00 |
| 02-23-2018 04:20:40 |
+---------------------+
3 rows in set (0.00 sec)

Chuyển đổi sang DATETIME chuẩn (YYYY-MM-DD HH:MM:SS):

mysql> SELECT STR_TO_DATE(REPLACE(DueDate, '''', ''), '%c-%e-%Y %T') FROM DemoTable;

Kết quả:

+-----------------------------------------------------+
| STR_TO_DATE(REPLACE(DueDate,'''',''), '%c-%e-%Y %T') |
+-----------------------------------------------------+
| 2019-10-01 10:19:20                                 |
| 2018-12-03 11:00:00                                 |
| 2018-02-23 04:20:40                                 |
+-----------------------------------------------------+
3 rows in set (0.00 sec)

Giải thích định dạng '%c-%e-%Y %T'

Ký tựÝ nghĩaVí dụ input
%cTháng (1-12, không đệm 0)10, 12, 2
%eNgày (1-31, không đệm 0)1, 3, 23
%YNăm 4 chữ số2019, 2018
%TGiờ:Phút:Giây (=%H:%i:%s)10:19:20

Lưu ý: REPLACE(DueDate, '''', '') trong ví dụ gốc có vẻ thừa (xóa dấu nháy đơn không tồn tại), có thể bỏ qua nếu dữ liệu sạch.

Các định dạng phổ biến khác

Định dạng inputPattern STR_TO_DATE
dd/mm/yyyy (UK/VN)'%d/%m/%Y'
mm/dd/yyyy (US)'%m/%d/%Y'
yyyy-mm-dd (ISO)'%Y-%m-%d'
dd.mm.yyyy'%d.%m.%Y'
dd-mm-yyyy hh:mm:ss'%d-%m-%Y %H:%i:%s'
Month dd, yyyy'%M %d, %Y'

Ứng dụng thực tế

-- Cập nhật cột DATE mới từ cột VARCHAR cũ
ALTER TABLE DemoTable ADD COLUMN DueDateParsed DATETIME;
UPDATE DemoTable SET DueDateParsed = STR_TO_DATE(DueDate, '%m-%d-%Y %H:%i:%s');
-- Sau đó tạo index trên DueDateParsed để query nhanh