Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

SELECT วันที่จากคอลัมน์ VARCHAR ใน MySQL ด้วย STR_TO_DATE

เมื่อคอลัมน์เก็บวันที่เป็น 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 แล้วดัชนีคอลัมน์ใหม่เพื่อประสิทธิภาพ