สร้างตารางและข้อมูลตัวอย่าง
mysql> create table DemoTable1985 ( DueDate varchar(20) );
mysql> insert into DemoTable1985 values('Jan 2017');
mysql> insert into DemoTable1985 values('May 2018');
mysql> insert into DemoTable1985 values('Aug 2015');
ข้อมูลก่อนแปลง
+----------+ | DueDate | +----------+ | Jan 2017 | | May 2018 | | Aug 2015 | +----------+
Query แปลงรูปแบบ
ใช้ STR_TO_DATE แปลงสตริงเป็น DATE แล้ว DATE_FORMAT จัดรูปแบบใหม่:
mysql> select date_format(str_to_date(DueDate, '%b %Y'), '%Y-%m-01') as Result from DemoTable1985;
ผลลัพธ์
+------------+ | Result | +------------+ | 2017-01-01 | | 2018-05-01 | | 2015-08-01 | +------------+
อธิบายขั้นตอน
STR_TO_DATE(DueDate, '%b %Y'): แปลง "Jan 2017" → DATE '2017-01-01' (วันจะกลายเป็น 1 อัตโนมัติ)DATE_FORMAT(..., '%Y-%m-01'): จัดรูปแบบเป็น 'YYYY-MM-01' (ต้องการวันที่ 1 ของเดือนนั้น)
Format Specifiers สำหรับเดือน
| Specifier | ความหมาย | ตัวอย่าง |
|---|---|---|
| %b | ชื่อเดือนย่อ 3 ตัวอักษร (Jan, Feb...) | Jan |
| %M | ชื่อเดือนเต็ม (January, February...) | January |
| %m | เดือน 2 หลัก (01-12) | 01 |
| %c | เดือน 1-2 หลัก (1-12) | 1 |
กรณีข้อมูลหลากหลายรูปแบบ
-- รองรับทั้ง "Jan 2017" และ "January 2017"
SELECT DATE_FORMAT(
COALESCE(
STR_TO_DATE(DueDate, '%b %Y'),
STR_TO_DATE(DueDate, '%M %Y')
), '%Y-%m-01'
) FROM DemoTable1985;
แปลงแล้วเก็บลงคอลัมน์ DATE
ALTER TABLE DemoTable1985 ADD COLUMN DueDateConverted DATE; UPDATE DemoTable1985 SET DueDateConverted = STR_TO_DATE(DueDate, '%b %Y');