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

เปรียบเทียบสตริงวันที่ใน MySQL ด้วย STR_TO_DATE()

การแปลงสตริงวันที่ให้เป็น DATE เพื่อเปรียบเทียบได้ถูกต้อง

เมื่อวันที่เก็บอยู่ในรูปแบบ VARCHAR (เช่น '10.01.2019') ไม่สามารถเปรียบเทียบได้โดยตรง ต้องแปลงด้วย STR_TO_DATE() ก่อน

Syntax

STR_TO_DATE(date_string, format_mask)

Format mask หลัก: %d=วัน, %m=เดือน, %Y=ปี 4 หลัก, %Y-%m-%d มาตรฐาน ISO

ตัวอย่างการใช้งาน

สร้างตารางเก็บวันที่แบบสตริง (รูปแบบ DD.MM.YYYY):

mysql> CREATE TABLE DemoTable712 (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ArrivalDate VARCHAR(100)
);
Query OK, 0 rows affected (0.65 sec)

mysql> INSERT INTO DemoTable712 (ArrivalDate) VALUES 
    ('10.01.2019'), ('11.12.2018'), ('01.11.2017'), ('20.06.2016');
Query OK, 4 rows affected

ข้อมูลต้นฉบับ:

mysql> SELECT * FROM DemoTable712;
+----+-------------+
| Id | ArrivalDate |
+----+-------------+
| 1  | 10.01.2019  |
| 2  | 11.12.2018  |
| 3  | 01.11.2017  |
| 4  | 20.06.2016  |
+----+-------------+
4 rows in set (0.00 sec)

ค้นหาวันที่เท่ากับ '2017-11-01' (ต้องแปลง ArrivalDate ก่อน):

mysql> SELECT * FROM DemoTable712 
WHERE STR_TO_DATE(ArrivalDate, '%d.%m.%Y') = '2017-11-01';
+----+-------------+
| Id | ArrivalDate |
+----+-------------+
| 3  | 01.11.2017  |
+----+-------------+
1 row in set (0.00 sec)

Format Mask ที่ใช้บ่อย

รูปแบบข้อมูลFormat Maskตัวอย่าง
DD/MM/YYYY%d/%m/%Y31/12/2023
DD-MM-YYYY%d-%m-%Y31-12-2023
YYYY-MM-DD%Y-%m-%d2023-12-31
DD.MM.YYYY%d.%m.%Y31.12.2023
MM/DD/YYYY (US)%m/%d/%Y12/31/2023

เคล็ดลับ

  • เก็บวันที่ในชนิด DATE หรือ DATETIME ตั้งแต่แรก จะไม่ต้องแปลง
  • STR_TO_DATE คืนค่า NULL หากรูปแบบไม่ตรง
  • ใช้ใน WHERE, ORDER BY, GROUP BY ได้
  • MySQL 8.0+ มี CAST(... AS DATE) แต่ต้องเป็นรูปแบบมาตรฐาน