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

การค้นหาข้อมูลระหว่างสองวันที่ใน MySQL ด้วย BETWEEN

เมื่อต้องการค้นหาระเบียนที่วันที่อยู่ในช่วงระหว่างสองวันที่ ใช้เงื่อนไข 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 ในช่วงเวลา