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

การตรวจสอบว่าวันที่ปัจจุบันอยู่ในช่วงวันที่ที่กำหนดใน MySQL

เมื่อต้องการเช็คว่าวันที่ปัจจุบัน (หรือวันที่ใดวันที่หนึ่ง) อยู่ในช่วงระหว่าง 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