สร้างตารางและข้อมูลตัวอย่าง
mysql> create table DemoTable2010 ( DueDate varchar(20) );
mysql> insert into DemoTable2010 values('12/10/2019 12:34:00');
mysql> insert into DemoTable2010 values('12/12/2011 11:00:20');
mysql> insert into DemoTable2010 values('31/01/2017 11:00:20');
ข้อมูลก่อนแปลง (DD/MM/YYYY HH:MM:SS)
+---------------------+ | DueDate | +---------------------+ | 12/10/2019 12:34:00 | | 12/12/2011 11:00:20 | | 31/01/2017 11:00:20 | +---------------------+
Query แปลงรูปแบบ
ใช้ STR_TO_DATE(สตริง, รูปแบบ) รูปแบบ '%d/%m/%Y %k:%i':
mysql> select str_to_date(DueDate, '%d/%m/%Y %k:%i') from DemoTable2010;
ผลลัพธ์ (YYYY-MM-DD HH:MM:SS)
+---------------------------------------+ | str_to_date(DueDate, '%d/%m/%Y %k:%i') | +---------------------------------------+ | 2019-10-12 12:34:00 | | 2011-12-12 11:00:00 | | 2017-01-31 11:00:00 | +---------------------------------------+
อธิบาย Format Specifiers
| Specifier | ความหมาย | ตัวอย่าง |
|---|---|---|
| %d | วัน (00-31) | 12, 31 |
| %m | เดือน (00-12) | 10, 01 |
| %Y | ปี 4 หลัก | 2019, 2017 |
| %k | ชั่วโมง 0-23 (ไม่ leading zero) | 12, 11 |
| %H | ชั่วโมง 00-23 (มี leading zero) | 12, 11 |
| %i | นาที (00-59) | 34, 00 |
| %s | วินาที (00-59) | (ไม่ได้ใช้ในตัวอย่าง) |
หมายเหตุเกี่ยวกับ Warning
ผลลัพธ์แสดง 3 warnings อาจมาจาก:
- รูปแบบเวลา
%k:%iไม่รวมวินาที แต่ข้อมูลมีวินาที (:20) - ควรใช้
'%d/%m/%Y %H:%i:%s'เพื่อความแม่นยำ
Query แปลงแล้วเก็บลงคอลัมน์ DATETIME
ALTER TABLE DemoTable2010 ADD COLUMN DueDateConverted DATETIME; UPDATE DemoTable2010 SET DueDateConverted = STR_TO_DATE(DueDate, '%d/%m/%Y %H:%i:%s');
ฟังก์ชันคู่: DATE_FORMAT
ทำตรงข้าม: DATE_FORMAT(date, format) → แปลง DATE เป็น String
SELECT DATE_FORMAT(NOW(), '%d/%m/%Y %H:%i:%s'); -- 20/12/2019 14:30:00