Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Kiểm tra cột chứa chữ hay số trong MySQL với REGEXP

Phân loại dữ liệu: Chuỗi ký tự vs Số nguyên bằng REGEXP

Sử dụng biểu thức chính quy REGEXP (hoặc RLIKE) để kiểm tra cột VARCHAR/TEXT có chứa chỉ số, chỉ chữ, hay hỗn hợp.

Cú pháp cơ bản

  • Chỉ số (digits only): col REGEXP '^[0-9]+$'
  • Chỉ chữ/ký tự không phải số: col NOT REGEXP '^[0-9]+$'

1. Tạo bảng và chèn dữ liệu hỗn hợp

mysql> CREATE TABLE DemoTable (Id VARCHAR(100));
mysql> INSERT INTO DemoTable VALUES ('1000'), ('John'), ('Carol_Smith'), ('2000');

2. Xem dữ liệu

mysql> SELECT * FROM DemoTable;
+-------------+
| Id          |
+-------------+
| 1000        |
| John        |
| Carol_Smith |
| 2000        |
+-------------+

3. TRƯỜNG HỢP 1: Chỉ lấy giá trị KHÔNG phải số (chuỗi có chữ)

mysql> SELECT * FROM DemoTable WHERE Id NOT REGEXP '^[0-9]+$';
+-------------+
| Id          |
+-------------+
| John        |
| Carol_Smith |
+-------------+

4. TRƯỜNG HỢP 2: Chỉ lấy giá trị LÀ số (chỉ chứa 0-9)

mysql> SELECT * FROM DemoTable WHERE Id REGEXP '^[0-9]+$';
+------+
| Id   |
+------+
| 1000 |
| 2000 |
+------+

Giải thích REGEXP:

  • ^: Bắt đầu chuỗi
  • [0-9]: Bất kỳ chữ số nào
  • +: Một hoặc nhiều lần
  • $: Kết thúc chuỗi
  • ^[0-9]+$: Toàn bộ chuỗi chỉ chứa 1 hoặc nhiều chữ số

Mở rộng - Các mẫu REGEXP hữu ích:

MẫuÝ nghĩa
'^[0-9]+$'Chỉ số nguyên dương
'^-?[0-9]+$'Số nguyên (có thể âm)
'^[0-9]*\\.?[0-9]+$'Số thực (có dấu chấm)
'^[A-Za-z]+$'Chỉ chữ cái
'^[A-Za-z0-9_]+$'Chữ, số, gạch dưới (identifier)

Lưu ý: REGEXP không dùng index → chậm trên bảng lớn. Cân nhắc thêm cột flag (is_numeric) hoặc dùng generated column.