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

วิธีตรวจสอบว่า NOW() อยู่ระหว่างวันที่สองวันที่ใน MySQL

ใช้ BETWEEN ตรวจสอบวันที่ปัจจุบันอยู่ในช่วงหรือไม่

NOW() คืนค่าวันที่/เวลาปัจจุบัน ใช้ BETWEEN เปรียบเทียบกับคอลัมน์วันที่เริ่มต้นและสิ้นสุด

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

CREATE TABLE DemoTable (
    FirstDate DATETIME,
    SecondDate DATETIME
);

INSERT INTO DemoTable VALUES
('2019-04-01', '2019-05-02'),
('2019-05-28', '2019-06-04'),
('2016-01-31', '2019-03-01');

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

+-----------------------+-----------------------+
| FirstDate             | SecondDate            |
+-----------------------+-----------------------+
| 2019-04-01 00:00:00   | 2019-05-02 00:00:00   |
| 2019-05-28 00:00:00   | 2019-06-04 00:00:00   |
| 2016-01-31 00:00:00   | 2019-03-01 00:00:00   |
+-----------------------+-----------------------+

คำสั่งตรวจสอบ NOW() อยู่ในช่วง (สมมติ NOW = 2019-05-30)

SELECT * FROM DemoTable 
WHERE NOW() BETWEEN FirstDate AND SecondDate;

ผลลัพธ์ (เฉพาะแถวที่ 2)

+-----------------------+-----------------------+
| FirstDate             | SecondDate            |
+-----------------------+-----------------------+
| 2019-05-28 00:00:00   | 2019-06-04 00:00:00   |
+-----------------------+-----------------------+

คำอธิบาย: BETWEEN รวมค่าขอบเขต (Inclusive) คือ FirstDate <= NOW() AND NOW() <= SecondDate

กรณีใช้ DATE แทน DATETIME:

WHERE CURDATE() BETWEEN DATE(FirstDate) AND DATE(SecondDate)

ประยุกต์ใช้: ตรวจสอบโปรโมชั่น/สิทธิ์/เหตุการณ์ที่ Active ในวันนี้ WHERE CURDATE() BETWEEN start_date AND end_date AND status = 'active'

⚐ ประสิทธิภาพ: หาก FirstDate/SecondDate มี Index ใช้ FirstDate <= NOW() AND SecondDate >= NOW() (Sargable) แทน BETWEEN เพื่อให้ Optimizer ใช้ Index Range Scan ได้ดีขึ้น