Computer >> Máy Tính >  >> Lập trình >> MySQL

Toán tử REGEXP MySQL là gì và nó xử lý đối sánh mẫu như thế nào?


MySQL hỗ trợ một loại hoạt động đối sánh mẫu khác dựa trên các biểu thức chính quy và REGEXP nhà điều hành. Sau đây là bảng mẫu, có thể được sử dụng cùng với REGEXP toán tử để xử lý đối sánh mẫu.

Mẫu
Mẫu phù hợp

^
Đầu chuỗi
$
Cuối chuỗi
.
Bất kỳ ký tự đơn nào
[...]
Bất kỳ ký tự nào được liệt kê giữa dấu ngoặc vuông
[^ ...]
Bất kỳ ký tự nào không được liệt kê giữa dấu ngoặc vuông
p1 | p2 | p3
Luân phiên; khớp với bất kỳ mẫu nào p1, p2 hoặc p3
*
Không có hoặc nhiều bản sao của phần tử trước
+
Một hoặc nhiều bản sao của phần tử trước
{n}
n trường hợp của phần tử trước
{m, n} m đến n lần xuất hiện của phần tử trước


Ví dụ

Để minh họa việc sử dụng REGEXP, chúng tôi đang sử dụng bảng ‘Student_info’ có dữ liệu sau -

mysql> Select * from Student_info;
+------+---------+------------+------------+
| id   | Name    | Address    | Subject    |
+------+---------+------------+------------+
|  101 | YashPal | Amritsar   | History    |
|  105 | Gaurav  | Chandigarh | Literature |
|  130 | Ram     | Jhansi     | Computers  |
|  132 | Shyam   | Chandigarh | Economics  |
|  133 | Mohan   | Delhi      | Computers  |
+------+---------+------------+------------+
5 rows in set (0.00 sec)

Bây giờ, sau đây là một số truy vấn sử dụng REGEXP để tìm các mẫu của 'Tên' từ bảng trên -

mysql> Select Name from student_info WHERE Name REGEXP '^Y';
+---------+
| Name    |
+---------+
| YashPal |
+---------+
1 row in set (0.11 sec)

Truy vấn trên sẽ tìm tất cả các tên bắt đầu bằng ‘Y’.

mysql> Select name from student_info WHERE Name REGEXP 'am$';
+-------+
| name  |
+-------+
| Ram   |
| Shyam |
+-------+
2 rows in set (0.00 sec)

Truy vấn trên sẽ tìm tất cả các tên kết thúc bằng ‘am’.

mysql> Select name from student_info WHERE Name REGEXP 'av';
+--------+
| name   |
+--------+
| Gaurav |
+--------+
1 row in set (0.00 sec)

Truy vấn trên sẽ tìm tất cả các tên có chứa ‘av’.

mysql> Select name from student_info WHERE Name REGEXP '^[aeiou]|am$';
+-------+
| name  |
+-------+
| Ram   |
| Shyam |
+-------+
2 rows in set (0.00 sec)

Truy vấn trên sẽ tìm thấy tất cả các tên bắt đầu bằng một nguyên âm và kết thúc bằng ‘am’.