เมื่อต้องการค้นหาระเบียนที่วันที่อยู่ในช่วงระหว่างสองวันที่ ใช้เงื่อนไข BETWEEN ในส่วน WHERE ซึ่งรองรับ DATE, DATETIME, TIMESTAMP และรวมค่าขอบเขต (Inclusive)
ตัวอย่างการใช้งาน
สร้างตารางโปรโมชั่น:
mysql> CREATE TABLE DemoTable1456 (
-> CustomerName VARCHAR(30),
-> StartOfferDate DATE,
-> EndOfferDate DATE
-> );
เพิ่มข้อมูล:
mysql> INSERT INTO DemoTable1456 VALUES ('Chris', '2019-09-01', '2019-09-30');
mysql> INSERT INTO DemoTable1456 VALUES ('David', '2019-09-01', '2019-10-30');
mysql> INSERT INTO DemoTable1456 VALUES ('Bob', '2018-10-01', '2018-10-20');
ดูข้อมูล:
mysql> SELECT * FROM DemoTable1456; +--------------+----------------+--------------+ | CustomerName | StartOfferDate | EndOfferDate | +--------------+----------------+--------------+ | Chris | 2019-09-01 | 2019-09-30 | | David | 2019-09-01 | 2019-10-30 | | Bob | 2018-10-01 | 2018-10-20 | +--------------+----------------+--------------+
ค้นหาโปรโมชั่นที่ครอบคลุมวันที่ปัจจุบัน (NOW()):
mysql> SELECT * FROM DemoTable1456
-> WHERE DATE(NOW()) BETWEEN StartOfferDate AND EndOfferDate;
ผลลัพธ์ (สมมติวันนี้ 2019-09-15 จะเจอ Chris และ David):
+--------------+----------------+--------------+ | CustomerName | StartOfferDate | EndOfferDate | +--------------+----------------+--------------+ | David | 2019-09-01 | 2019-10-30 | +--------------+----------------+--------------+
รายละเอียด BETWEEN
- Inclusive: รวมทั้งค่าเริ่มต้นและค่าสิ้นสุด (
col >= start AND col <= end) - ลำดับสำคัญ:
BETWEEN low AND high(low ต้องน้อยกว่า high) - ทำงานกับ Numbers, Strings, Dates, Datetime
คำเตือนสำคัญกับ DATETIME
หากคอลัมน์เป็น DATETIME และเปรียบเทียบกับ DATE:
-- อาจพลาดข้อมูลเวลา 2019-09-30 15:00:00 WHERE date_col BETWEEN '2019-09-01' AND '2019-09-30' -- '2019-09-30' ถูกตีความว่า '2019-09-30 00:00:00'
แก้ไข:
-- ใช้ DATE() ตัดเวลาออก WHERE DATE(date_col) BETWEEN '2019-09-01' AND '2019-09-30' -- หรือระบุเวลาสิ้นสุด WHERE date_col BETWEEN '2019-09-01 00:00:00' AND '2019-09-30 23:59:59' -- หรือใช้ >= และ < WHERE date_col >= '2019-09-01' AND date_col < '2019-10-01'
การประยุกต์ใช้
- รายงานยอดขายรายวัน/รายเดือน/รายปี
- ดึงออเดอร์ในช่วงโปรโมชั่น
- หาลูกค้าที่สมัครในช่วงเวลา
- Log Analysis: Error/Access logs ในช่วงเวลา