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

ดึงข้อมูล MySQL ของวันก่อนหน้า (Yesterday) ได้อย่างไร?

ใช้ฟังก์ชัน 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 DAY
  • WHERE 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 แบบสุดท้ายสำหรับตารางใหญ่