เมื่อมีข้อมูลวันที่/เวลาเก็บเป็น VARCHAR/Text ต้องการแปลงเป็นชนิดข้อมูล DATETIME จริง (24-hour Format) ให้ใช้ STR_TO_DATE() กำหนด Format Pattern
Syntax
SELECT STR_TO_DATE(yourColumnName, '%Y-%m-%d %H:%i:%s') FROM yourTableName;
Format Specifiers
| Specifier | ความหมาย | ตัวอย่าง |
%Y | ปี 4 หลัก | 2024 |
%m | เดือน 01-12 | 01, 12 |
%d | วัน 01-31 | 01, 31 |
%H | ชั่วโมง 00-23 (24h) | 15, 00 |
%h / %I | ชั่วโมง 01-12 (12h) | 03, 12 |
%i | นาที 00-59 | 45, 00 |
%s | วินาที 00-59 | 23, 00 |
%p | AM/PM | AM, PM |
สร้างตารางและข้อมูล String
mysql> create table DemoTable (ArrivalDate varchar(200));
mysql> insert into DemoTable values
('2019-01-31 15:45:23'),('2012-12-12 20:30:26'),
('2016-06-07 21:04:05'),('2017-02-03 19:24:32');
คำสั่งแปลงเป็น DATETIME
mysql> select str_to_date(ArrivalDate, '%Y-%m-%d %H:%i:%s') AS `24HourFormat` from DemoTable;
ผลลัพธ์ (ชนิด DATETIME)
+---------------------+
| 24HourFormat |
+---------------------+
| 2019-01-31 15:45:23 |
| 2012-12-12 20:30:26 |
| 2016-06-07 21:04:05 |
| 2017-02-03 19:24:32 |
+---------------------+
รูปแบบวันที่อื่นที่พบบ่อย
| Input Format | Pattern | ตัวอย่าง |
| YYYY-MM-DD | %Y-%m-%d | 2024-12-31 |
| DD/MM/YYYY | %d/%m/%Y | 31/12/2024 |
| MM/DD/YYYY | %m/%d/%Y | 12/31/2024 |
| DD-MM-YYYY HH:MI | %d-%m-%Y %H:%i | 31-12-2024 15:30 |
| YYYYMMDD | %Y%m%d | 20241231 |
คำเตือน
- Format Pattern ต้อง ตรงกับข้อมูลทุกตัวอักษร (รวม -, /, space, :)
- ข้อมูลไม่ตรง Pattern → คืน NULL
- ใช้
WHERE STR_TO_DATE(col, pattern) IS NOT NULL กรองข้อมูลผิด
- MySQL 8.0+ มี
CAST(col AS DATETIME) สำหรับรูปแบบมาตรฐาน ISO 8601
แปลงกลับ: DATETIME → String (DATE_FORMAT)
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); -- 2024-12-31 15:30:45