ฟังก์ชัน STR_TO_DATE()
STR_TO_DATE(string, format)
ตัวอย่าง: ตาราง demo72
CREATE TABLE demo72 (due_date VARCHAR(40));
INSERT INTO demo72 VALUES ('11/15'), ('02/20'), ('07/95');
ข้อมูล
+----------+
| due_date |
+----------+
| 11/15 |
| 02/20 |
| 07/95 |
+----------+
คำสั่ง: แปลง MM/YY → YYYY-MM-DD โดยกำหนดวัน = 10
SELECT STR_TO_DATE(CONCAT('10/', due_date), '%d/%m/%y') AS original_date
FROM demo72;
ผลลัพธ์
+---------------+
| original_date |
+---------------+
| 2015-11-10 |
| 2020-02-10 |
| 1995-07-10 |
+---------------+
อธิบาย Format '%d/%m/%y'
| ส่วน | ความหมาย | ตัวอย่าง Input |
%d | วัน (Day) | 10 (จาก CONCAT) |
/ | ตัวคั่นตรงตัว | / |
%m | เดือน 2 หลัก (01-12) | 11, 02, 07 |
/ | ตัวคั่นตรงตัว | / |
%y | ปี 2 หลัก (00-99) | 15, 20, 95 |
กฎปี 2 หลัก (%y)
- 00-69 → 2000-2069
- 70-99 → 1970-1999
- ดังนั้น '95' → 1995, '20' → 2020
กรณีศึกษา: วันแรก/สุดท้ายของเดือน
วันแรกของเดือน
SELECT STR_TO_DATE(CONCAT('01/', due_date), '%d/%m/%y') FROM demo72;
+--------------------------------------------------------+
| STR_TO_DATE(CONCAT('01/', due_date), '%d/%m/%y') |
+--------------------------------------------------------+
| 2015-11-01 |
| 2020-02-01 |
| 1995-07-01 |
+--------------------------------------------------------+
วันสุดท้ายของเดือน (LAST_DAY)
SELECT LAST_DAY(STR_TO_DATE(CONCAT('01/', due_date), '%d/%m/%y')) FROM demo72;
+----------------------------------------------------------------------+
| LAST_DAY(STR_TO_DATE(CONCAT('01/', due_date), '%d/%m/%y')) |
+----------------------------------------------------------------------+
| 2015-11-30 |
| 2020-02-29 |
| 1995-07-31 |
+----------------------------------------------------------------------+
ข้อผิดพลาดที่พบบ่อย
| ข้อผิดพลาด | สาเหตุ | แก้ไข |
| คืน NULL | Format ไม่ตรง Input (เช่น '1/15' vs '%d/%m/%y') | ใช้ LPAD: CONCAT('10/', LPAD(due_date, 5, '0')) |
| ปีผิด | เข้าใจ %y ผิด (คิดว่า 95 = 2095) | จำกฎ 70-99 = 19xx |
| เดือน > 12 | ข้อมูลผิดพลาด | Validate ก่อน INSERT |
MySQL 8.0: TO_DATE() Alias
SELECT TO_DATE(CONCAT('10/', due_date), '%d/%m/%y') FROM demo72;