เมื่อมีข้อมูลวันที่เก็บเป็น VARCHAR ในรูปแบบที่มีจุดคั่น (เช่น '01.10.2019') สามารถแปลงเป็นชนิดข้อมูล DATE ได้โดยใช้ฟังก์ชัน STR_TO_DATE() ระบุ Format Specifier ให้ตรงกับรูปแบบข้อมูล
ตัวอย่างการใช้งาน
สร้างตารางเก็บวันที่เป็นข้อความ:
mysql> CREATE TABLE DemoTable1445 (AdmissionDate VARCHAR(20));
เพิ่มข้อมูลรูปแบบ DD.MM.YYYY:
mysql> INSERT INTO DemoTable1445 VALUES ('01.10.2019');
mysql> INSERT INTO DemoTable1445 VALUES ('31.12.2018');
mysql> INSERT INTO DemoTable1445 VALUES ('01.02.2017');
ดูข้อมูลก่อนแปลง:
mysql> SELECT * FROM DemoTable1445; +---------------+ | AdmissionDate | +---------------+ | 01.10.2019 | | 31.12.2018 | | 01.02.2017 | +---------------+
แปลงและอัปเดตคอลัมน์เดียวกัน (In-place):
mysql> UPDATE DemoTable1445
-> SET AdmissionDate = STR_TO_DATE(AdmissionDate, '%d.%m.%Y');
ผลลัพธ์ (กลายเป็น DATE รูปแบบมาตรฐาน YYYY-MM-DD):
mysql> SELECT * FROM DemoTable1445; +---------------+ | AdmissionDate | +---------------+ | 2019-10-01 | | 2018-12-31 | | 2017-02-01 | +---------------+
Format Specifiers ที่ใช้
| Specifier | ความหมาย | ตัวอย่าง |
|---|---|---|
| %d | วัน 2 หลัก (01-31) | 01, 31 |
| %m | เดือน 2 หลัก (01-12) | 01, 12 |
| %Y | ปี 4 หลัก | 2019 |
| %. | จุดตรงตัว (Literal dot) | . |
รูปแบบ '%d.%m.%Y' ตรงกับ DD.MM.YYYY
รูปแบบวันที่ยอดนิยมและ Specifiers
| รูปแบบข้อมูล | Format String |
|---|---|
| DD/MM/YYYY | '%d/%m/%Y' |
| MM/DD/YYYY | '%m/%d/%Y' |
| YYYY-MM-DD | '%Y-%m-%d' |
| DD Mon YYYY | '%d %b %Y' |
| DD Month YYYY | '%d %M %Y' |
| DD.MM.YYYY HH:MM:SS | '%d.%m.%Y %H:%i:%s' |
คำแนะนำ
- หลังแปลงแล้ว ควร ALTER TABLE ... MODIFY AdmissionDate DATE เพื่อเปลี่ยนชนิดข้อมูลเป็น DATE จริง
- STR_TO_DATE คืนค่า NULL หากรูปแบบไม่ตรง → ตรวจสอบข้อมูลก่อน UPDATE
- ใช้
SELECT STR_TO_DATE(col, fmt) FROM t WHERE STR_TO_DATE(col, fmt) IS NULLหาข้อมูลผิดรูปแบบ - MySQL 8.0+ รองรับ
CAST(str AS DATE)สำหรับรูปแบบ ISO (YYYY-MM-DD) โดยไม่ต้องระบุ Format