เมื่อคอลัมน์เก็บวันที่เป็น VARCHAR (รูปแบบ DD-MM-YYYY HH:MM:SS) และต้องการเปรียบเทียบหาวันที่หลังจากวันที่กำหนด ให้ใช้ STR_TO_DATE() แปลงทั้งคอลัมน์และค่าเปรียบเทียบให้เป็น DATE/DATETIME ก่อน
ตัวอย่างการใช้งาน
สร้างตารางเก็บวันที่ส่งสินค้า (VARCHAR):
mysql> create table DemoTable1364 (ShippingDate varchar(100));
mysql> insert into DemoTable1364 values('01-09-2019 12:34:55'),('01-07-2018 17:10:00'),('24-09-2019 10:31:22'),('20-09-2018 13:00:00');
ข้อมูล:
+---------------------+ | ShippingDate | +---------------------+ | 01-09-2019 12:34:55 | | 01-07-2018 17:10:00 | | 24-09-2019 10:31:22 | | 20-09-2018 13:00:00 | +---------------------+
คำสั่งหาวันที่หลัง 2019-09-21 10:31:20
mysql> select * from DemoTable1364
-> where str_to_date(ShippingDate,'%d-%m-%Y %H:%i:%s') > str_to_date('2019-09-21 10:31:20', '%Y-%m-%d %H:%i:%s');
ผลลัพธ์ (ได้เฉพาะ 24-09-2019)
+---------------------+ | ShippingDate | +---------------------+ | 24-09-2019 10:31:22 | +---------------------+
คำอธิบาย:
STR_TO_DATE(str, format)แปลงสตริงเป็น DATETIME ตามรูปแบบที่กำหนด- คอลัมน์:
'%d-%m-%Y %H:%i:%s'(DD-MM-YYYY HH:MM:SS) - ค่าเปรียบเทียบ:
'%Y-%m-%d %H:%i:%s'(YYYY-MM-DD HH:MM:SS) - หลังแปลงแล้ว เปรียบเทียบเป็น DATETIME ได้ตรง
- แนะนำ: เปลี่ยนชนิดคอลัมน์เป็น DATETIME/TIMESTAMP ตั้งแต่ออกแบบ เพื่อประสิทธิภาพและความถูกต้อง