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

MySQL: ตรวจสอบคอลัมน์เป็นตัวเลขหรือตัวอักษรด้วย REGEXP


คำอธิบาย

ใช้ 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 คอลัมน์นั้น