ฟังก์ชัน STR_TO_DATE() ใช้เพื่อแปลงข้อความ (String) ที่เป็นรูปแบบวัน/เวลา ให้เป็นชนิดข้อมูล DATE, DATETIME, หรือ TIME เหมาะสำหรับการทำงานกับข้อมูลที่เก็บวันเวลาในรูปแบบข้อความ เช่น '10-04-2025', '2025/04/10 14:30' เป็นต้น
ประโยชน์ของฟังก์ชัน STR_TO_DATE()
- ใช้แปลงข้อมูลที่เก็บเป็นข้อความให้เป็นชนิด
DATE,DATETIME,TIME - ช่วยให้สามารถใช้คำสั่ง SQL เช่น
WHERE,DATEDIFF(),ORDER BYกับวันที่ที่แปลงแล้วได้ - เหมาะสำหรับการนำเข้าข้อมูลจาก Excel, CSV, หรือระบบภายนอก
รูปแบบการใช้งาน
STR_TO_DATE(string, format)
stringคือข้อความที่เก็บวันหรือเวลาที่ต้องการแปลงformatคือรูปแบบที่ใช้แปลงข้อความเป็นวันที่/เวลา (format string)
รูปแบบที่ใช้ได้ (format specifiers)
| Specifier | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| %a | ชื่อวันแบบย่อ (Sun – Sat) | Sun |
| %b | ชื่อเดือนแบบย่อ (Jan – Dec) | Apr |
| %c | เลขเดือน (1 – 12) | 4 |
| %D | วันที่พร้อม suffix (1st, 2nd, 3rd, …) | 10th |
| %d | วันที่ (มีเลข 0 นำหน้า) (01 – 31) | 10 |
| %e | วันที่ (ไม่มีเลข 0 นำหน้า) (1 – 31) | 10 |
| %f | ไมโครวินาที (000000 – 999999) | 123456 |
| %H | ชั่วโมง (24 ชม.) (00 – 23) | 14 |
| %h | ชั่วโมง (12 ชม.) (01 – 12) | 02 |
| %I | ชั่วโมง (12 ชม.) (01 – 12) | 02 |
| %i | นาที (00 – 59) | 30 |
| %j | วันในปี (001 – 366) | 100 |
| %k | ชั่วโมง (24 ชม. ไม่เติม 0) (0 – 23) | 14 |
| %l | ชั่วโมง (12 ชม. ไม่เติม 0) (1 – 12) | 2 |
| %M | ชื่อเดือนเต็ม (January – December) | April |
| %m | เลขเดือน (มีเลข 0 นำหน้า) (01 – 12) | 04 |
| %p | AM หรือ PM | PM |
| %r | เวลาแบบ 12 ชม. (hh:mm:ss AM/PM) | 02:30:00 PM |
| %S | วินาที (00 – 59) | 45 |
| %s | วินาที (00 – 59) | 45 |
| %T | เวลาแบบ 24 ชม. (hh:mm:ss) | 14:30:45 |
| %U | สัปดาห์ของปี (เริ่มจากวันอาทิตย์) (00 – 53) | 15 |
| %u | สัปดาห์ของปี (เริ่มจากวันจันทร์) (00 – 53) | 15 |
| %V | สัปดาห์ของปี (เริ่มจากวันอาทิตย์) (01 – 53) ใช้กับ %X | 15 |
| %v | สัปดาห์ของปี (เริ่มจากวันจันทร์) (01 – 53) ใช้กับ %x | 15 |
| %W | ชื่อวันเต็ม (Sunday – Saturday) | Thursday |
| %w | เลขวันในสัปดาห์ (0 = Sunday และ 6 = Saturday) | 4 |
| %X | เลขปีแบบเต็ม โดยวันอาทิตย์เป็นวันแรกของสัปดาห์ (ใช้กับ %V) | 2025 |
| %x | เลขปีแบบเต็ม โดยวันจันทร์เป็นวันแรกของสัปดาห์ (ใช้กับ %v) | 2025 |
| %Y | ปีแบบเต็ม (4 หลัก) | 2025 |
| %y | ปีแบบ 2 หลัก (00 – 99) | 25 |
ตัวอย่างการใช้งาน
แปลง '10-04-2025' (วันที่-เดือน-ปี)
SQL
SELECT STR_TO_DATE('10-04-2025', '%d-%m-%Y') AS converted_date;
-- ผลลัพธ์: 2025-04-10แปลงวันที่และเวลา '2025/04/10 14:30:00'
SQL
SELECT STR_TO_DATE('2025/04/10 14:30:00', '%Y/%m/%d %H:%i:%s') AS datetime_value;
-- ผลลัพธ์: 2025-04-10 14:30:00ใช้ในคำสั่ง WHERE เพื่อกรองข้อมูล
SQL
SELECT *
FROM events
WHERE event_date = STR_TO_DATE('15/04/2025', '%d/%m/%Y');หมายเหตุ
stringและformatต้องตรงกันเป๊ะ หากไม่ตรง ผลลัพธ์จะเป็นNULL- ฟังก์ชันนี้แปลงได้เฉพาะข้อความที่มีรูปแบบชัดเจน เช่น
'04/2025'ต้องใช้%m/%Y - ไม่รองรับการแปลงจากภาษาอื่น เช่น ชื่อเดือนเป็นภาษาไทย