ฟังก์ชัน STR_TO_DATE()
แปลงสตริงเป็น DATE ตามรูปแบบที่ระบุ
STR_TO_DATE(string, format)
ไวยากรณ์สำหรับ MM/YY + วันคงที่
SELECT STR_TO_DATE(CONCAT('yourDay/', yourColumn), '%d/%m/%y')
FROM yourTable;
ตัวอย่าง: ตาราง demo46
CREATE TABLE demo46 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
short_date VARCHAR(20)
);
INSERT INTO demo46 (short_date) VALUES
('09/18'), ('12/20'), ('11/20');
ข้อมูล
+----+------------+ | id | short_date | +----+------------+ | 1 | 09/18 | | 2 | 12/20 | | 3 | 11/20 | +----+------------+
คำสั่ง: แปลงเป็นวันที่เต็ม โดยกำหนดวัน = 24
SELECT STR_TO_DATE(CONCAT('24/', short_date), '%d/%m/%y') AS Convert_In_Full_Date
FROM demo46;
ผลลัพธ์
+----------------------+ | Convert_In_Full_Date | +----------------------+ | 2018-09-24 | | 2020-12-24 | | 2020-11-24 | +----------------------+
รูปแบบ Format Specifiers
| Specifier | ความหมาย | ตัวอย่าง |
|---|---|---|
%d | วัน (00-31) | 24 |
%m | เดือน (01-12) | 09 |
%y | ปี 2 หลัก (00-99) | 18 → 2018 |
%Y | ปี 4 หลัก | 2018 |
%H:%i:%s | เวลา 24 ชม. | 14:30:05 |
กฎการแปลงปี 2 หลัก (%y)
- 00-69 → 2000-2069
- 70-99 → 1970-1999
- ดังนั้น '09/18' → 2018, '07/95' → 1995
กรณีศึกษา: วันแรก/สุดท้ายของเดือน
วันแรกของเดือน
SELECT STR_TO_DATE(CONCAT('01/', short_date), '%d/%m/%y') FROM demo46;
วันสุดท้ายของเดือน (ใช้ LAST_DAY)
SELECT LAST_DAY(STR_TO_DATE(CONCAT('01/', short_date), '%d/%m/%y')) FROM demo46;
ข้อควรระวัง
- STR_TO_DATE คืนค่า DATE (ไม่มีเวลา) — ใช้ CAST(... AS DATETIME) หากต้องการ DATETIME
- ข้อมูล input ต้องตรง format ที่ระบุ ไม่เช่นนั้นคืน NULL
- MySQL 8.0: ใช้
TO_DATE()(alias ของ STR_TO_DATE) ได้เช่นกัน