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

การ SELECT ข้อมูลวันที่ในรูปแบบ VARCHAR ด้วย STR_TO_DATE ใน MySQL

เมื่อวันที่เก็บเป็น VARCHAR ต้องแปลงเป็น DATE ก่อนเปรียบเทียบ ใช้ STR_TO_DATE()

สร้างตารางตัวอย่าง

mysql> create table DemoTable ( 
    DueDate varchar(60) ) ; 
Query OK, 0 rows affected (0.71 sec)

เพิ่มข้อมูลตัวอย่าง

mysql> insert into DemoTable values('12-AUG-2016'); Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('14-AUG-2018'); Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('24-AUG-2012'); Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('14-AUG-2012'); Query OK, 1 row affected (0.19 sec)

แสดงข้อมูลทั้งหมด

mysql> select *from DemoTable;
+-------------+
| DueDate     |
+-------------+
| 12-AUG-2016 |
| 14-AUG-2018 |
| 24-AUG-2012 |
| 14-AUG-2012 |
+-------------+
4 rows in set (0.00 sec)

คิวรี่ค้นหาวันที่ 14-AUG-2012

mysql> select *from DemoTable where str_to_date(DueDate,'%d-%M-%Y')=str_to_date('14-AUG-2012','%d-%M-%Y');

ผลลัพธ์:

+-------------+
| DueDate     |
+-------------+
| 14-AUG-2012 |
+-------------+
1 row in set (0.00 sec)

รูปแบบ Format Specifiers สำคัญ

Specifierความหมายตัวอย่าง
%dวัน (00-31)14
%Mชื่อเดือนเต็มAugust
%bชื่อเดือนย่อAug
%mเดือน (00-12)08
%Yปี 4 หลัก2012
%yปี 2 หลัก12

ข้อควรระวัง

  • ประสิทธิภาพ: ใช้ฟังก์ชันบนคอลัมน์ ทำให้ไม่ใช้ Index ได้
  • แนวทางแก้: เพิ่มคอลัมน์ DATE แยก หรือ Generated Column (MySQL 5.7+)
  • ALTER TABLE DemoTable ADD DueDate_parsed DATE GENERATED ALWAYS AS (STR_TO_DATE(DueDate, '%d-%M-%Y')) STORED;

ฟังก์ชันที่เกี่ยวข้อง

  • DATE_FORMAT(date, format) - แปลง DATE เป็น VARCHAR
  • STR_TO_DATE(str, format) - แปลง VARCHAR เป็น DATE
  • GET_FORMAT() - ได้ format string สำหรับ locale ต่างๆ