Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

แปลงรูปแบบวันที่ด้วย STR_TO_DATE และ REPLACE ใน MySQL

การแปลงรูปแบบวันที่สตริงให้เป็น 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 FormatFormat 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');