ใช้ 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 ได้ดีขึ้น