ใน MySQL สามารถค้นหารายการที่มีค่าตัวเลขอยู่ในช่วง 6-10 ได้ 2 วิธีหลัก: ใช้ BETWEEN (ง่ายและเร็ว) หรือ REGEXP (ยืดหยุ่นกว่าสำหรับรูปแบบซับซ้อน)
วิธีที่ 1: ใช้ BETWEEN (แนะนำสำหรับช่วงตัวเลข)
SELECT * FROM table_name
WHERE column_name BETWEEN 6 AND 10;
- รองรับชนิดข้อมูลตัวเลข (INT, DECIMAL, FLOAT)
- รวมค่าขอบเขต (6 และ 10)
- ใช้ดัชนีได้ (index-friendly)
วิธีที่ 2: ใช้ REGEXP (Regular Expression)
SELECT * FROM table_name
WHERE column_name REGEXP '10|[6-9]';
คำอธิบาย Regex: '10|[6-9]'
10- ตรงกับตัวเลข 10|- หรือ (OR)[6-9]- ตรงกับตัวเลข 6, 7, 8, 9 (ช่วง)
หมายเหตุ: REGEXP ใน MySQL ทำงานกับสตริง หากคอลัมน์เป็นตัวเลข จะแปลงเป็นสตริงอัตโนมัติ แต่อาจช้ากว่า BETWEEN
ตัวอย่างการใช้งาน
1. สร้างตารางและเพิ่มข้อมูล 1-10
CREATE TABLE RegularExpressionDemo (Id INT);
INSERT INTO RegularExpressionDemo VALUES
(1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
2. ใช้ BETWEEN
SELECT * FROM RegularExpressionDemo WHERE Id BETWEEN 6 AND 10;
ผลลัพธ์:
+------+
| Id |
+------+
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+------+
3. ใช้ REGEXP
SELECT * FROM RegularExpressionDemo WHERE Id REGEXP '10|[6-9]';
ผลลัพธ์:
+------+
| Id |
+------+
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+------+
Regex Pattern เพิ่มเติมสำหรับตัวเลข
| Pattern | ความหมาย | ตัวอย่างตรง |
|---|---|---|
'^[0-9]+$' | เฉพาะตัวเลข (1 หรือหลายหลัก) | 0, 123, 9999 |
'^[1-9][0-9]*$' | จำนวนเต็มบวก (ไม่ขึ้นต้น 0) | 1, 42, 100 |
'^[0-9]{1,3}$' | ตัวเลข 1-3 หลัก | 5, 99, 999 |
'^(1[0-2]|[1-9])$' | 1-12 (เดือน) | 1, 9, 12 |
'^(0[1-9]|[12][0-9]|3[01])$' | 01-31 (วันที่) | 01, 15, 31 |
สรุป
- ช่วงตัวเลขเรียบง่าย → ใช้
BETWEEN(เร็ว, อ่านง่าย, ใช้ index ได้) - รูปแบบซับซ้อน/ไม่ต่อเนื่อง → ใช้
REGEXP(ยืดหยุ่น) - MySQL 8.0+ รองรับ
REGEXP_LIKE(),REGEXP_SUBSTR(),REGEXP_REPLACE()เพิ่มเติม