การใช้ Regular Expression (REGEXP) กรองข้อมูลรูปแบบหมายเลขโทรศัพท์
MySQL รองรับ REGEXP สำหรับ Pattern Matching ใช้กรองเฉพาะแถวที่ตรงตามรูปแบบที่กำหนด
ตัวอย่าง: ค้นหาเฉพาะรูปแบบ XXX-XXX-XXXX (ตัวเลข 3-3-4 คั่น Hyphen)
สร้างตารางและเพิ่มข้อมูลผสม:
mysql> CREATE TABLE DemoTable (Code VARCHAR(100));
Query OK, 0 rows affected (1.16 sec)
mysql> INSERT INTO DemoTable VALUES
('100-677-9876'), -- ถูกต้อง
('100-677-9876-John'), -- มีข้อความต่อท้าย
('David-100-677-9876'); -- มีข้อความนำหน้า
Query OK, 3 rows affected
ข้อมูลทั้งหมด:
mysql> SELECT * FROM DemoTable;
+--------------------+ | Code | +--------------------+ | 100-677-9876 | | 100-677-9876-John | | David-100-677-9876 | +--------------------+ 3 rows in set (0.00 sec)
Regex Pattern: ^\(?[0-9]{3}\)?[\s-]?[0-9]{3}[\s-]?[0-9]{4}$
^- เริ่มสตริง\(?[0-9]{3}\)?- เลข 3 หลัก อาจมีวงเล็บครอบ[\s-]?- อาจมี Space หรือ Hyphen คั่น[0-9]{3}- เลข 3 หลัก[\s-]?- คั่นอีกครั้ง[0-9]{4}$- เลข 4 หลัก จบสตริง
คิวรี่ค้นหา:
mysql> SELECT * FROM DemoTable
WHERE Code REGEXP '^\(?[0-9]{3}\)?[\s-]?[0-9]{3}[\s-]?[0-9]{4}$';
+--------------+ | Code | +--------------+ | 100-677-9876 | +--------------+ 1 row in set (0.00 sec)
Regex Pattern อื่นๆ ที่มีประโยชน์
| รูปแบบ | Regex | คำอธิบาย |
|---|---|---|
^[^@]+@[^@]+\.[^@]+$ | รูปแบบพื้นฐาน | |
| ไทย Mobile | ^0[689][0-9]{8}$ | 06x, 08x, 09x 10 หลัก |
| ไทย ID Card | ^[0-9]{13}$ | 13 หลัก |
| IPv4 | ^([0-9]{1,3}\.){3}[0-9]{1,3}$ | พื้นฐาน |
| เฉพาะตัวเลข | ^[0-9]+$ | Digit only |
| อังกฤษ+ตัวเลข | ^[A-Za-z0-9]+$ | Alphanumeric |
เคล็ดลับ
- MySQL ใช้ POSIX Regex (ไม่ใช่ PCRE)
REGEXP BINARY- Case SensitiveRLIKE= Alias ของREGEXP- MySQL 8.0+ มี
REGEXP_REPLACE(),REGEXP_SUBSTR()