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

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

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