ใช้ DATE_SUB() ลบ 3 สัปดาห์จากวันนี้ แล้วกรองวันที่มากกว่าหรือเท่า
DATE_SUB(date, INTERVAL expr unit) ลบช่วงเวลาจากวันที่ ใช้ INTERVAL 3 WEEK สำหรับ 3 สัปดาห์
ตัวอย่างสร้างตารางและข้อมูล
CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ArrivalDate DATETIME
);
-- สมมติ CURDATE() = '2019-06-08'
INSERT INTO DemoTable (ArrivalDate) VALUES
('2019-05-15'), ('2019-06-08'), ('2019-05-20'), ('2019-05-12');
ข้อมูลในตาราง
+----+---------------------+ | Id | ArrivalDate | +----+---------------------+ | 1 | 2019-05-15 00:00:00 | | 2 | 2019-06-08 00:00:00 | | 3 | 2019-05-20 00:00:00 | | 4 | 2019-05-12 00:00:00 | +----+---------------------+
คำสั่งดึงวันที่ >= (วันนี้ - 3 สัปดาห์)
SELECT ArrivalDate FROM DemoTable WHERE ArrivalDate >= DATE_SUB(CURDATE(), INTERVAL 3 WEEK);
ผลลัพธ์ (CURDATE - 3 สัปดาห์ = 2019-05-18)
+---------------------+ | ArrivalDate | +---------------------+ | 2019-06-08 00:00:00 | | 2019-05-20 00:00:00 | +---------------------+
คำอธิบาย:
DATE_SUB(CURDATE(), INTERVAL 3 WEEK)= 2019-06-08 - 21 วัน = 2019-05-18ArrivalDate >= ...รวมวันที่พอดี 2019-05-18 (หากมี)- ใช้
CURDATE()แทนNOW()เพื่อเปรียบเทียบเฉพาะวันที่ (ไม่รวมเวลา)
รูปแบบเทียบเท่า:
WHERE ArrivalDate >= CURDATE() - INTERVAL 3 WEEK(Arithmetic syntax)WHERE ArrivalDate > DATE_SUB(CURDATE(), INTERVAL 3 WEEK)(มากกว่า สิ้นสุด 3 สัปดาห์ ไม่รวมวันนั้น)
⚐ ประสิทธิภาพ: คำนวณวันที่เป้าหมายใน Application แล้วส่งมาเป็น Literal '2019-05-18' เพื่อให้ใช้ Index ได้