ใช้ฟังก์ชัน DATE() ร่วมกับ NOW() - INTERVAL 1 DAY เพื่อดึงข้อมูลของวันเมื่อวาน
ไวยากรณ์
SELECT * FROM yourTableName WHERE DATE(yourColumnName) = DATE(NOW() - INTERVAL 1 DAY);
สร้างตารางตัวอย่าง
mysql> create table yesterDayRecordsDemo (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ArrivalDateTime datetime
-> );
Query OK, 0 rows affected (0.44 sec)
เพิ่มข้อมูลตัวอย่าง
mysql> insert into yesterDayRecordsDemo(ArrivalDateTime) values('2014-11-09 13:45:21');
mysql> insert into yesterDayRecordsDemo(ArrivalDateTime) values('2017-10-19 11:41:31');
mysql> insert into yesterDayRecordsDemo(ArrivalDateTime) values('2019-02-25 10:40:45');
mysql> insert into yesterDayRecordsDemo(ArrivalDateTime) values('2019-02-26 12:06:07');
mysql> insert into yesterDayRecordsDemo(ArrivalDateTime) values('2019-02-25 12:06:47');
mysql> insert into yesterDayRecordsDemo(ArrivalDateTime) values('2019-02-27 11:45:49');
แสดงข้อมูลทั้งหมด
mysql> select * from yesterDayRecordsDemo;
ผลลัพธ์ (สมมติวันนี้คือ 2019-02-27):
+----+---------------------+ | Id | ArrivalDateTime | +----+---------------------+ | 1 | 2014-11-09 13:45:21 | | 2 | 2017-10-19 11:41:31 | | 3 | 2019-02-25 10:40:45 | | 4 | 2019-02-26 12:06:07 | | 5 | 2019-02-25 12:06:47 | | 6 | 2019-02-27 11:45:49 | +----+---------------------+
Query ดึงข้อมูลวันเมื่อวาน (2019-02-26)
mysql> SELECT * FROM yesterDayRecordsDemo
-> WHERE DATE(ArrivalDateTime) = DATE(NOW() - INTERVAL 1 DAY);
ผลลัพธ์:
+----+---------------------+ | Id | ArrivalDateTime | +----+---------------------+ | 4 | 2019-02-26 12:06:07 | +----+---------------------+
รูปแบบอื่นที่ใช้ได้
WHERE DATE(yourColumn) = CURDATE() - INTERVAL 1 DAYWHERE DATE(yourColumn) = DATE_SUB(CURDATE(), INTERVAL 1 DAY)WHERE yourColumn >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND yourColumn < CURDATE()(รองรับ index ดีกว่า)
หมายเหตุประสิทธิภาพ
การใช้ฟังก์ชันบนคอลัมน์ (DATE(yourColumn)) จะทำให้ไม่สามารถใช้ index ได้ ควรพิจารณาใช้ range query แบบสุดท้ายสำหรับตารางใหญ่