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

MySQL: ค้นหาตัวเลข 6-10 ด้วย BETWEEN และ REGEXP

ใน 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() เพิ่มเติม