การแปลงสตริงวันที่ให้เป็น DATE เพื่อเปรียบเทียบได้ถูกต้อง
เมื่อวันที่เก็บอยู่ในรูปแบบ VARCHAR (เช่น '10.01.2019') ไม่สามารถเปรียบเทียบได้โดยตรง ต้องแปลงด้วย STR_TO_DATE() ก่อน
Syntax
STR_TO_DATE(date_string, format_mask)
Format mask หลัก: %d=วัน, %m=เดือน, %Y=ปี 4 หลัก, %Y-%m-%d มาตรฐาน ISO
ตัวอย่างการใช้งาน
สร้างตารางเก็บวันที่แบบสตริง (รูปแบบ DD.MM.YYYY):
mysql> CREATE TABLE DemoTable712 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ArrivalDate VARCHAR(100)
);
Query OK, 0 rows affected (0.65 sec)
mysql> INSERT INTO DemoTable712 (ArrivalDate) VALUES
('10.01.2019'), ('11.12.2018'), ('01.11.2017'), ('20.06.2016');
Query OK, 4 rows affected
ข้อมูลต้นฉบับ:
mysql> SELECT * FROM DemoTable712;
+----+-------------+ | Id | ArrivalDate | +----+-------------+ | 1 | 10.01.2019 | | 2 | 11.12.2018 | | 3 | 01.11.2017 | | 4 | 20.06.2016 | +----+-------------+ 4 rows in set (0.00 sec)
ค้นหาวันที่เท่ากับ '2017-11-01' (ต้องแปลง ArrivalDate ก่อน):
mysql> SELECT * FROM DemoTable712 WHERE STR_TO_DATE(ArrivalDate, '%d.%m.%Y') = '2017-11-01';
+----+-------------+ | Id | ArrivalDate | +----+-------------+ | 3 | 01.11.2017 | +----+-------------+ 1 row in set (0.00 sec)
Format Mask ที่ใช้บ่อย
| รูปแบบข้อมูล | Format Mask | ตัวอย่าง |
|---|---|---|
| DD/MM/YYYY | %d/%m/%Y | 31/12/2023 |
| DD-MM-YYYY | %d-%m-%Y | 31-12-2023 |
| YYYY-MM-DD | %Y-%m-%d | 2023-12-31 |
| DD.MM.YYYY | %d.%m.%Y | 31.12.2023 |
| MM/DD/YYYY (US) | %m/%d/%Y | 12/31/2023 |
เคล็ดลับ
- เก็บวันที่ในชนิด
DATEหรือDATETIMEตั้งแต่แรก จะไม่ต้องแปลง STR_TO_DATEคืนค่าNULLหากรูปแบบไม่ตรง- ใช้ใน
WHERE,ORDER BY,GROUP BYได้ - MySQL 8.0+ มี
CAST(... AS DATE)แต่ต้องเป็นรูปแบบมาตรฐาน