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

ดึงข้อมูลวันนี้และเมื่อวานใน MySQL

การค้นหาข้อมูลของวันนี้และเมื่อวานด้วย CURDATE() และ DATE_SUB()

ใช้ CURDATE() ได้วันที่ปัจจุบัน (ไม่รวมเวลา) และ DATE_SUB(CURDATE(), INTERVAL 1 DAY) ได้วันที่เมื่อวาน

ไวยากรณ์

SELECT * FROM yourTableName 
WHERE yourDateColumn = CURDATE() 
   OR yourDateColumn = DATE_SUB(CURDATE(), INTERVAL 1 DAY);

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

สร้างตารางสินค้าและวันที่โปรโมชั่น:

CREATE TABLE ProductDemo (
    Id INT NOT NULL AUTO_INCREMENT,
    ProductName VARCHAR(20),
    ProductOfferDate DATETIME,
    PRIMARY KEY(Id)
);

เพิ่มข้อมูลทดสอบ:

INSERT INTO ProductDemo(ProductName, ProductOfferDate) VALUES('Product-11', '2017-05-21');
INSERT INTO ProductDemo(ProductName, ProductOfferDate) VALUES('Product-22', '2019-01-15');
INSERT INTO ProductDemo(ProductName, ProductOfferDate) VALUES('Product-21', '2019-01-14');
INSERT INTO ProductDemo(ProductName, ProductOfferDate) VALUES('Product-91', '2018-10-23');
INSERT INTO ProductDemo(ProductName, ProductOfferDate) VALUES('Product-133', '2019-01-24');

สมมติวันนี้คือ 2019-01-15 ค้นหาสินค้าที่มีโปรโมชั่นวันนี้หรือเมื่อวาน:

SELECT * FROM ProductDemo 
WHERE ProductOfferDate = CURDATE() 
   OR ProductOfferDate = DATE_SUB(CURDATE(), INTERVAL 1 DAY);

ผลลัพธ์:

+----+-------------+---------------------+
| Id | ProductName | ProductOfferDate    |
+----+-------------+---------------------+
| 2  | Product-22  | 2019-01-15 00:00:00 |
| 3  | Product-21  | 2019-01-14 00:00:00 |
+----+-------------+---------------------+

วิธีอื่นที่ยืดหยุ่นกว่า (ช่วงวันที่)

-- ระหว่างเมื่อวานถึงวันนี้ (รวมทั้งสองวัน)
SELECT * FROM ProductDemo 
WHERE ProductOfferDate >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)
  AND ProductOfferDate < DATE_ADD(CURDATE(), INTERVAL 1 DAY);

คำแนะนำ

  • หากคอลัมน์เป็น DATETIME ให้ใช้วิธีช่วงวันที่ (BETWEEN หรือ >= AND <) เพื่อครอบคลุมเวลาทั้งวัน
  • ใช้ DATE(yourDateTimeColumn) เพื่อเปรียบเทียบเฉพาะวันที่ (แต่อาจทำให้ index ไม่ทำงาน)
  • สำหรับช่วงกว้างขึ้น: INTERVAL 7 DAY (7 วันย้อนหลัง), INTERVAL 1 MONTH (1 เดือนย้อนหลัง)