การค้นหาข้อมูลของวันนี้และเมื่อวานด้วย 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 เดือนย้อนหลัง)