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

ค้นหาช่วงวันที่ (BETWEEN) ที่เก็บเป็น VARCHAR ใน MySQL

ใช้ STR_TO_DATE() แปลง VARCHAR เป็น DATE แล้วค่อยใช้ BETWEEN

ไวยากรณ์

SELECT * FROM yourTableName 
WHERE STR_TO_DATE(LEFT(yourColumnName, LOCATE(' ', yourColumnName)), '%m/%d/%Y') 
BETWEEN 'startDate' AND 'endDate';

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

สร้างตาราง (เก็บวันที่เป็น VARCHAR รูปแบบ MM/DD/YYYY HH:MI AM/PM):

mysql> create table SearchDateAsVarchar (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> ShippingDate varchar(100),
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.99 sec)

เพิ่มข้อมูล:

mysql> INSERT INTO SearchDateAsVarchar(ShippingDate) VALUES ('6/28/2011 9:58 AM');
mysql> INSERT INTO SearchDateAsVarchar(ShippingDate) VALUES ('6/18/2011 10:50:39 AM');
mysql> INSERT INTO SearchDateAsVarchar(ShippingDate) VALUES ('6/22/2011 11:45:40 AM');

ข้อมูล:

+----+-----------------------+
| Id | ShippingDate          |
+----+-----------------------+
|  1 | 6/28/2011 9:58 AM     |
|  2 | 6/18/2011 10:50:39 AM |
|  3 | 6/22/2011 11:45:40 AM |
+----+-----------------------+

ค้นหาช่วง 2011-06-20 ถึง 2011-06-28:

mysql> SELECT * FROM SearchDateAsVarchar 
    -> WHERE STR_TO_DATE(LEFT(ShippingDate, LOCATE(' ', ShippingDate)), '%m/%d/%Y') 
    -> BETWEEN '2011-06-20' AND '2011-06-28';

ผลลัพธ์:

+----+-----------------------+
| Id | ShippingDate          |
+----+-----------------------+
|  1 | 6/28/2011 9:58 AM     |
|  3 | 6/22/2011 11:45:40 AM |
+----+-----------------------+

แนะนำ: ควรเก็บวันที่ในชนิด DATE/DATETIME/TIMESTAMP แทน VARCHAR เพื่อประสิทธิภาพและความถูกต้อง