บทนำ
ฟังก์ชัน STR_TO_DATE() ใช้แปลงสตริงเป็น DATE/DATETIME ตามรูปแบบ (Format Specifier) ที่ระบุ ซึ่งเป็นการทำงานตรงข้ามกับ DATE_FORMAT()
รูปแบบการใช้งาน
SELECT STR_TO_DATE(yourColumnName, 'yourFormatSpecifier') FROM yourTableName;
Format Specifier สำคัญ
| Specifier | ความหมาย | ตัวอย่าง |
| %d | วัน (01-31) | 01, 15, 31 |
| %m | เดือน (01-12) | 01, 06, 12 |
| %Y | ปี 4 หลัก | 2019, 2024 |
| %y | ปี 2 หลัก | 19, 24 |
| %H | ชั่วโมง (00-23) | 13, 23 |
| %i | นาที (00-59) | 05, 30 |
| %s | วินาที (00-59) | 00, 45 |
ตัวอย่างการสร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (
-> AdmissionDate VARCHAR(100)
-> );
Query OK, 0 rows affected (0.55 sec)
mysql> INSERT INTO DemoTable VALUES('01-12-2019');
mysql> INSERT INTO DemoTable VALUES('15-06-2019');
mysql> INSERT INTO DemoTable VALUES('21-01-2016');
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์
+---------------+
| AdmissionDate |
+---------------+
| 01-12-2019 |
| 15-06-2019 |
| 21-01-2016 |
+---------------+
3 rows in set (0.00 sec)
คำสั่งแปลงสตริง 'DD-MM-YYYY' เป็น DATE
mysql> SELECT STR_TO_DATE(AdmissionDate, '%d-%m-%Y') FROM DemoTable;
ผลลัพธ์
+---------------------------------------+
| STR_TO_DATE(AdmissionDate, '%d-%m-%Y') |
+---------------------------------------+
| 2019-12-01 |
| 2019-06-15 |
| 2016-01-21 |
+---------------------------------------+
3 rows in set (0.04 sec)
รูปแบบวันที่ทั่วไปและ Format Specifier
| รูปแบบสตริง | Format Specifier |
| 01-12-2019 | %d-%m-%Y |
| 2019-12-01 | %Y-%m-%d |
| 12/01/2019 | %m/%d/%Y |
| 01 Dec 2019 | %d %b %Y |
| December 1, 2019 | %M %d, %Y |
| 2019-12-01 13:30:45 | %Y-%m-%d %H:%i:%s |
ข้อควรระวัง
- Format Specifier ต้องตรงกับรูปแบบข้อมูล **ทุกตัวอักษร** รวมถึงตัวคั่น (-, /, space)
- หากไม่ตรง จะคืนค่า NULL
- ใช้
DATE_FORMAT() สำหรับแปลง DATE → String