เมื่อต้องการเช็คว่าวันที่ปัจจุบัน (หรือวันที่ใดวันที่หนึ่ง) อยู่ในช่วงระหว่าง StartDate และ EndDate หรือไม่ ใช้เงื่อนไขเปรียบเทียบปกติ date >= StartDate AND date <= EndDate ซึ่งจะคืนค่า 1 (TRUE) หรือ 0 (FALSE)
ตัวอย่างการใช้งาน
สร้างตารางช่วงวันที่:
mysql> CREATE TABLE DemoTable1448 (
-> StartDate DATE,
-> EndDate DATE
-> );
เพิ่มข้อมูลช่วงวันที่ต่างๆ:
mysql> INSERT INTO DemoTable1448 VALUES ('2019-01-21', '2019-03-22');
mysql> INSERT INTO DemoTable1448 VALUES ('2019-04-05', '2019-10-10');
mysql> INSERT INTO DemoTable1448 VALUES ('2019-10-01', '2019-10-29');
mysql> INSERT INTO DemoTable1448 VALUES ('2018-12-31', '2019-12-31');
ดูข้อมูลและวันที่ปัจจุบัน:
mysql> SELECT * FROM DemoTable1448; +------------+------------+ | StartDate | EndDate | +------------+------------+ | 2019-01-21 | 2019-03-22 | | 2019-04-05 | 2019-10-10 | | 2019-10-01 | 2019-10-29 | | 2018-12-31 | 2019-12-31 | +------------+------------+ -- สมมติวันนี้คือ 2019-10-05
เช็คว่าวันนี้อยู่ในช่วงไหน (คืนค่า 1=ใช่, 0=ไม่):
mysql> SELECT (CURDATE() >= StartDate AND CURDATE() <= EndDate) AS DateInRange FROM DemoTable1448;
ผลลัพธ์:
+-------------+ | DateInRange | +-------------+ | 0 | | 1 | | 1 | | 1 | +-------------+
แถวแรกหมดอายุแล้ว (สิ้นสุด 2019-03-22) แถว 2-4 ครอบคลุม 2019-10-05
การประยุกต์ใช้
- โปรโมชั่น/ส่วนลด: แสดงเฉพาะโปรโมชั่นที่กำลังมี效力
- สิทธิ์การเข้าถึง: ตรวจสอบ License/Subscription ที่ยังไม่หมดอายุ
- Event/Calendar: แสดงกิจกรรมที่เกิดขึ้น "วันนี้"
- Reporting: กรองข้อมูลในช่วง Reporting Period
คำสั่งที่เกี่ยวข้อง
-- ใช้ BETWEEN (เทียบเท่า แต่อ่านง่ายกว่า) SELECT * FROM DemoTable1448 WHERE CURDATE() BETWEEN StartDate AND EndDate; -- ดึงเฉพาะช่วงที่ Active SELECT * FROM DemoTable1448 WHERE CURDATE() BETWEEN StartDate AND EndDate; -- นับจำนวนช่วงที่ Active SELECT COUNT(*) FROM DemoTable1448 WHERE CURDATE() BETWEEN StartDate AND EndDate;
ข้อควรระวัง
- ชนิดข้อมูล: ใช้ DATE กับ DATE, DATETIME กับ DATETIME (หรือ CAST ให้ตรง)
- NULL Handling: หาก StartDate หรือ EndDate เป็น NULL เงื่อนไขจะเป็น UNKNOWN (ไม่ใช่ TRUE/FALSE) → ใช้ COALESCE() หรือ IS NULL เช็คก่อน
- Timezone: CURDATE() ใช้ Timezone ของ Server ควรสอดคล้องกับ Application
- Performance: สร้าง Index (StartDate, EndDate) เพื่อ Range Scan