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

วิธีดึงข้อมูลระหว่างวันนี้ และ 7 วันที่แล้วใน MySQL

กรองข้อมูลช่วง 7 วันที่ผ่านมา dengan DATE_SUB และ INTERVAL

ใช้ DATE_SUB() หรือลบ INTERVAL โดยตรงจาก NOW()/CURDATE() เพื่อหาวันที่ 7 วันที่แล้ว แล้วกรองข้อมูลที่มากกว่าวันนั้น

ตัวอย่างสร้างตารางและข้อมูล

CREATE TABLE DemoTable (LoginDate DATE);
INSERT INTO DemoTable VALUES
('2018-03-21'), ('2019-05-22'), ('2019-05-27'), ('2019-06-01');

สมมติวันนี้คือ 2019-06-02

ข้อมูลในตาราง

+------------+
| LoginDate  |
+------------+
| 2018-03-21 |
| 2019-05-22 |
| 2019-05-27 |
| 2019-06-01 |
+------------+

คำสั่งดึงข้อมูล 7 วันที่ผ่านมา (รวมวันนี้)

SELECT * FROM DemoTable 
WHERE DATE(LoginDate) > (NOW() - INTERVAL 7 DAY);

ผลลัพธ์ (วันที่ > 2019-05-26)

+------------+
| LoginDate  |
+------------+
| 2019-05-27 |
| 2019-06-01 |
+------------+

คำอธิบาย:

  • NOW() - INTERVAL 7 DAY คำนวณวันที่ 7 วันที่แล้วจากปัจจุบัน (รวมเวลา)
  • DATE(LoginDate) แปลงเป็น DATE เฉพาะ (ตัดเวลา) เพื่อเปรียบเทียบแบบ Date-only
  • ใช้ > (มากกว่า) จะได้วันที่ 27 พฤษภาคม ถึง 2 มิถุนายน (7 วัน)

รูปแบบอื่นที่เทียบเท่า:

  • WHERE LoginDate >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) (ใช้ CURDATE แทน NOW, ใช้ >=)
  • WHERE LoginDate BETWEEN DATE_SUB(CURDATE(), INTERVAL 6 DAY) AND CURDATE() (ช่วง 7 วันครบ)

⚐ ประสิทธิภาพ: หากคอลัมน์ LoginDate มี Index ควรหลีกเลี่ยงการใช้ Function (DATE()) บนคอลัมน์ ควรเขียนเป็น LoginDate >= '2019-05-26' (คำนวณวันที่ใน Application แล้วส่งมา) หรือใช้ Generated Column + Index