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

วิธีเลือกวันที่มากกว่าหรือเท่ากับ วันนี้ลบ 3 สัปดาห์ใน MySQL

ใช้ 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-18
  • ArrivalDate >= ... รวมวันที่พอดี 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 ได้