เมื่อคอลัมน์เก็บวันที่เป็น VARCHAR รูปแบบ DD/MM/YYYY ต้องใช้ STR_TO_DATE() แปลงเป็น DATE ชั่วคราวใน WHERE เพื่อเปรียบเทียบได้ถูกต้อง
ตัวอย่างการสร้างตาราง
mysql> create table DemoTable (
DueDate varchar(100) );
Query OK, 0 rows affected (0.50 sec)
เพิ่มข้อมูลวันที่รูปแบบ DD/MM/YYYY
mysql> insert into DemoTable values('21/10/2018');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable values('18/08/2019');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('01/12/2012');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('31/01/2016');
Query OK, 1 row affected (0.19 sec)
แสดงข้อมูลทั้งหมด
mysql> select * from DemoTable;
+------------+ | DueDate | +------------+ | 21/10/2018 | | 18/08/2019 | | 01/12/2012 | | 31/01/2016 | +------------+ 4 rows in set (0.00 sec)
คำสั่ง SELECT เฉพาะวันที่หลัง 2010-01-31
mysql> select * from DemoTable where str_to_date(DueDate, '%d/%m/%Y') > '2010-01-31';
ผลลัพธ์ (ทั้ง 4 แถว เพราะทุกวันที่ > 2010-01-31)
+------------+ | DueDate | +------------+ | 21/10/2018 | | 18/08/2019 | | 01/12/2012 | | 31/01/2016 | +------------+ 4 rows in set (0.00 sec)
คำอธิบาย Format Specifiers:
%d- วันที่ (01-31)%m- เดือน (01-12)%Y- ปี 4 หลัก
ข้อควรระวัง: ใช้ STR_TO_DATE ใน WHERE ทุกครั้งจะไม่ใช้ดัชนีได้ (Full table scan) แนะนำให้เพิ่มคอลัมน์ DATE จริง และอัปเดตจาก VARCHAR แล้วดัชนีคอลัมน์ใหม่เพื่อประสิทธิภาพ