คำอธิบาย
ใช้ REGEXP (Regular Expression) เพื่อตรวจสอบว่าคอลัมน์ประกอบด้วยตัวเลขอย่างเดียว หรือตัวอักษรอย่างเดียว
รูปแบบ Regular Expression
- เฉพาะตัวเลข:
REGEXP '^[0-9]+$' - ไม่ใช่ตัวเลข (มีตัวอักษร/สัญลักษณ์):
NOT REGEXP '^[0-9]+$'
^ = เริ่มสตริง, $ = จบสตริง, [0-9]+ = ตัวเลข 1 ตัวขึ้นไป
ขั้นตอนการสร้างตารางและข้อมูลตัวอย่าง
mysql> create table DemoTable(
Id varchar(100) );
Query OK, 0 rows affected (0.49 sec)
การเพิ่มข้อมูล
mysql> insert into DemoTable values('1000');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Carol_Smith');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('2000');
Query OK, 1 row affected (0.10 sec)
แสดงข้อมูลทั้งหมด
mysql> select * from DemoTable;
ผลลัพธ์:
+-------------+ | Id | +-------------+ | 1000 | | John | | Carol_Smith | | 2000 | +-------------+ 4 rows in set (0.00 sec)
CASE 1: ดึงเฉพาะค่าที่เป็นตัวอักษร/สัญลักษณ์ (ไม่ใช่ตัวเลขเพียงอย่างเดียว)
mysql> select * from DemoTable where Id NOT REGEXP '^[0-9]+$';
ผลลัพธ์
+-------------+ | Id | +-------------+ | John | | Carol_Smith | +-------------+ 2 rows in set (0.00 sec)
CASE 2: ดึงเฉพาะค่าที่เป็นตัวเลขอย่างเดียว
mysql> select * from DemoTable where Id REGEXP '^[0-9]+$';
ผลลัพธ์
+------+ | Id | +------+ | 1000 | | 2000 | +------+ 2 rows in set (0.00 sec)
Regular Expression เพิ่มเติม
| Pattern | ความหมาย |
|---|---|
^[0-9]+$ | ตัวเลขอย่างเดียว 1 ตัวขึ้นไป |
^[0-9]*$ | ตัวเลขอย่างเดียว 0 ตัวขึ้นไป (รวมสตริงว่าง) |
^[A-Za-z]+$ | ตัวอักษรอังกฤษอย่างเดียว |
^[A-Za-z0-9]+$ | ตัวอักษรและตัวเลขอย่างเดียว (Alphanumeric) |
^[^0-9]+$ | ไม่มีตัวเลขเลย |
ประสิทธิภาพ
REGEXP ไม่ใช้ Index ได้ หากตารางใหญ่ ควรเพิ่ม Generated Column ที่เป็น Boolean (IS_NUMERIC) แล้ว Index คอลัมน์นั้น