การแปลงรูปแบบวันที่สตริงให้เป็น DATE/DATETIME มาตรฐาน
ใช้ STR_TO_DATE() ร่วมกับ REPLACE() เพื่อลบอักขระที่ไม่ต้องการ (เช่น Quote) ก่อนแปลง
ตัวอย่าง: แปลง 'MM-DD-YYYY HH:MM:SS' เป็น DATETIME
สร้างตารางเก็บวันที่แบบสตริง:
mysql> CREATE TABLE DemoTable (DueDate VARCHAR(100));
Query OK, 0 rows affected (0.78 sec)
mysql> INSERT INTO DemoTable VALUES
('10-01-2019 10:19:20'),
('12-03-2018 11:00:00'),
('02-23-2018 04:20:40');
Query OK, 3 rows affected
ข้อมูลต้นฉบับ:
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)
แปลงรูปแบบด้วย REPLACE ลบ Quote (ถ้ามี) แล้ว STR_TO_DATE:
mysql> SELECT STR_TO_DATE(REPLACE(DueDate, '"', ''), '%c-%e-%Y %T') FROM DemoTable;
+-----------------------------------------------------+ | 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)
Format Specifiers ที่ใช้
%c- เดือน 1-12 (ไม่มี Leading zero)%e- วัน 1-31 (ไม่มี Leading zero)%Y- ปี 4 หลัก%T- เวลา HH:MM:SS (เทียบเท่า %H:%i:%s)
รูปแบบอื่นที่พบบ่อย
| Input Format | Format String |
|---|---|
| DD/MM/YYYY | %d/%m/%Y |
| DD-MM-YYYY | %d-%m-%Y |
| YYYY-MM-DD | %Y-%m-%d |
| MM/DD/YYYY HH:MM:SS | %m/%d/%Y %H:%i:%s |
| DD Mon YYYY | %d %b %Y |
แปลงและเก็บลงคอลัมน์ใหม่ (UPDATE)
ALTER TABLE DemoTable ADD DueDateParsed DATETIME; UPDATE DemoTable SET DueDateParsed = STR_TO_DATE(REPLACE(DueDate, '"', ''), '%c-%e-%Y %T');