การแปลงรูปแบบวันที่ด้วย STR_TO_DATE และ DATE_FORMAT
MySQL มีฟังก์ชัน STR_TO_DATE() สำหรับแปลงสตริงเป็นวันที่ และ DATE_FORMAT() สำหรับจัดรูปแบบวันที่ให้เป็นรูปแบบที่ต้องการ
ไวยากรณ์
-- แปลงสตริง dd.mm.yyyy เป็น DATE
SELECT STR_TO_DATE(yourDateColumn, '%d.%m.%Y') FROM yourTableName;
-- แปลงแล้วจัดรูปแบบเป็น YYYY-MM-DD
SELECT DATE_FORMAT(STR_TO_DATE(yourDateColumn, '%d.%m.%Y'), '%Y-%m-%d') FROM yourTableName;
ตัวอย่างการใช้งาน
สร้างตารางทดสอบ:
CREATE TABLE ConvertIntoDateFormat (
Id INT NOT NULL AUTO_INCREMENT,
LoginDate VARCHAR(30),
PRIMARY KEY(Id)
);
เพิ่มข้อมูลทดสอบ:
INSERT INTO ConvertIntoDateFormat(LoginDate) VALUES('11.01.2019');
INSERT INTO ConvertIntoDateFormat(LoginDate) VALUES('10.04.2017');
INSERT INTO ConvertIntoDateFormat(LoginDate) VALUES('21.10.2016');
INSERT INTO ConvertIntoDateFormat(LoginDate) VALUES('26.09.2018');
INSERT INTO ConvertIntoDateFormat(LoginDate) VALUES('25.12.2012');
แปลงรูปแบบวันที่:
SELECT STR_TO_DATE(LoginDate, '%d.%m.%Y') AS DateFormat FROM ConvertIntoDateFormat;
ผลลัพธ์:
+------------+
| DateFormat |
+------------+
| 2019-01-11 |
| 2017-04-10 |
| 2016-10-21 |
| 2018-09-26 |
| 2012-12-25 |
+------------+
ใช้ DATE_FORMAT ร่วมกับ (เพื่อความชัดเจนหรือรูปแบบอื่น):
SELECT DATE_FORMAT(STR_TO_DATE(LoginDate, '%d.%m.%Y'), '%Y-%m-%d') AS DateFormat
FROM ConvertIntoDateFormat;
รหัสรูปแบบวันที่ (Format Specifiers)
| รหัส | ความหมาย | ตัวอย่าง |
|---|---|---|
| %d | วัน (00-31) | 11 |
| %m | เดือน (00-12) | 01 |
| %Y | ปี 4 หลัก | 2019 |
| %y | ปี 2 หลัก | 19 |
| %b | ชื่อเดือนย่อ | Jan |
| %M | ชื่อเดือนเต็ม | January |
หมายเหตุ
- เก็บวันที่ในคอลัมน์ประเภท
DATEหรือDATETIMEแทน VARCHAR เพื่อประสิทธิภาพและความถูกต้อง - STR_TO_DATE จะคืนค่า NULL หากรูปแบบไม่ตรงกัน