บทนำ
ตัวดำเนินการ BETWEEN ใช้ตรวจสอบว่าค่าอยู่ในช่วงที่กำหนด (Inclusive: รวมค่าขอบเขต) เหมาะสำหรับตัวเลข วันที่ และข้อความ
รูปแบบการใช้งาน
SELECT * FROM TableName WHERE ColumnName BETWEEN StartValue AND EndValue;
ตัวอย่างการสร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Start INT,
-> End INT
-> );
Query OK, 0 rows affected (0.91 sec)
mysql> INSERT INTO DemoTable(Start, End) VALUES(100, 200);
mysql> INSERT INTO DemoTable(Start, End) VALUES(400, 500);
mysql> INSERT INTO DemoTable(Start, End) VALUES(210, 350);
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์
+----+-------+------+
| Id | Start | End |
+----+-------+------+
| 1 | 100 | 200 |
| 2 | 400 | 500 |
| 3 | 210 | 350 |
+----+-------+------+
3 rows in set (0.00 sec)
คำสั่งหาแถวที่มีช่วงครอบคลุมค่า 432
mysql> SELECT * FROM DemoTable WHERE 432 BETWEEN Start AND End;
ผลลัพธ์
+----+-------+------+
| Id | Start | End |
+----+-------+------+
| 2 | 400 | 500 |
+----+-------+------+
1 row in set (0.04 sec)
คำอธิบาย
- ค่า 432 อยู่ในช่วง 400-500 (แถวที่ 2) ✅
- ค่า 432 ไม่อยู่ในช่วง 100-200 (แถวที่ 1) ❌
- ค่า 432 ไม่อยู่ในช่วง 210-350 (แถวที่ 3) ❌
การใช้งานกับวันที่
-- หาแถวที่วันที่อยู่ในช่วง
SELECT * FROM Events
WHERE EventDate BETWEEN '2024-01-01' AND '2024-12-31';
-- เทียบเท่ากับ
SELECT * FROM Events
WHERE EventDate >= '2024-01-01' AND EventDate <= '2024-12-31';
ข้อควรระวัง
- BETWEEN รวมค่าขอบเขต (Inclusive):
BETWEEN 1 AND 10ครอบคลุม 1 ถึง 10 - ค่า Start ต้องน้อยกว่าหรือเท่า End มิฉะนั้นจะไม่ได้ผลลัพธ์
- ใช้กับ NULL ไม่ได้ (NULL BETWEEN ... จะเป็น NULL/False)