Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

3 cách để phát hiện xem một chuỗi có khớp với một biểu thức chính quy trong MySQL hay không

MySQL có một số hàm và toán tử cho phép chúng ta thực hiện các thao tác sử dụng biểu thức chính quy (regex). Bài viết này trình bày hai toán tử và một hàm cho phép chúng tôi tìm hiểu xem một chuỗi có khớp với một biểu thức chính quy được chỉ định bởi một mẫu nhất định hay không.

Các hàm và toán tử regex này là:

  • REGEXP_LIKE()
  • REGEXP
  • RLIKE

Về cơ bản, tất cả chúng đều tương đương nhau, vì các toán tử (hai toán tử thứ hai) đều là từ đồng nghĩa của hàm (toán tử đầu tiên). Trong mọi trường hợp, bạn có thể xem các ví dụ về cả ba hoạt động bên dưới.

REGEXP_LIKE() Chức năng

Đầu tiên, hãy xem xét chức năng. Đây là một ví dụ về việc chạy tìm kiếm regex bằng REGEXP_LIKE() chức năng:

SELECT 
  REGEXP_LIKE('Car', '^C') AS 'Match',
  REGEXP_LIKE('Bar', '^C') AS 'No Match';

Kết quả:

+-------+----------+
| Match | No Match |
+-------+----------+
|     1 |        0 |
+-------+----------+

Chuỗi đầu tiên phù hợp (vì nó bắt đầu bằng C ) nên kết quả là 1 . Chuỗi thứ hai không khớp và do đó kết quả là 0 .

Tuy nhiên, hàm này có thể hữu ích hơn nhiều so với việc chỉ trả về 1 hoặc 0 . Ví dụ:nó có thể được thêm vào WHERE mệnh đề khi truy vấn cơ sở dữ liệu. Trong trường hợp này, chúng ta có thể nhận được danh sách các hàng có chứa mẫu phù hợp.

Đây là một ví dụ:

SELECT AlbumId, AlbumName
FROM Albums
WHERE REGEXP_LIKE(AlbumName, '^Power');

Kết quả:

+---------+------------+
| AlbumId | AlbumName  |
+---------+------------+
|       1 | Powerslave |
|       2 | Powerage   |
+---------+------------+

Đây là bảng đầy đủ:

SELECT AlbumId, AlbumName
FROM Albums;

Kết quả:

+---------+--------------------------+
| AlbumId | AlbumName                |
+---------+--------------------------+
|       1 | Powerslave               |
|       2 | Powerage                 |
|       3 | Singing Down the Lane    |
|       4 | Ziltoid the Omniscient   |
|       5 | Casualties of Cool       |
|       6 | Epicloud                 |
|       7 | Somewhere in Time        |
|       8 | Piece of Mind            |
|       9 | Killers                  |
|      10 | No Prayer for the Dying  |
|      11 | No Sound Without Silence |
|      12 | Big Swing Face           |
|      13 | Blue Night               |
|      14 | Eternity                 |
|      15 | Scandinavia              |
|      16 | Long Lost Suitcase       |
|      17 | Praise and Blame         |
|      18 | Along Came Jones         |
|      19 | All Night Wrong          |
|      20 | The Sixteen Men of Tain  |
+---------+--------------------------+

REGEXP Nhà điều hành

Dưới đây là cách thực hiện điều tương tự bằng cách sử dụng REGEXP nhà điều hành:

SELECT 
  'Car' REGEXP '^C' AS 'Match',
  'Bar' REGEXP '^C' AS 'No Match';

Kết quả:

+-------+----------+
| Match | No Match |
+-------+----------+
|     1 |        0 |
+-------+----------+

Và ví dụ về cơ sở dữ liệu:

SELECT AlbumId, AlbumName
FROM Albums
WHERE AlbumName REGEXP '^Power';

Kết quả:

+---------+------------+
| AlbumId | AlbumName  |
+---------+------------+
|       1 | Powerslave |
|       2 | Powerage   |
+---------+------------+

Bạn cũng có thể sử dụng NOT REGEXP để trả về kết quả ngược lại.

RLIKE Nhà điều hành

Và đây nó đang sử dụng RLIKE :

SELECT 
  'Car' RLIKE '^C' AS 'Match',
  'Bar' RLIKE '^C' AS 'No Match';

Kết quả:

+-------+----------+
| Match | No Match |
+-------+----------+
|     1 |        0 |
+-------+----------+

Và ví dụ về cơ sở dữ liệu:

SELECT AlbumId, AlbumName
FROM Albums
WHERE AlbumName RLIKE '^Power';

Kết quả:

+---------+------------+
| AlbumId | AlbumName  |
+---------+------------+
|       1 | Powerslave |
|       2 | Powerage   |
+---------+------------+

Trong trường hợp này, tôi chỉ cần hoán đổi REGEXP cho RLIKE và để yên phần còn lại của mã.

Bạn cũng có thể sử dụng NOT RLIKE để trả về kết quả ngược lại.

Các chức năng khác của REGEX

MySQL cũng bao gồm một số hàm và toán tử regex khác. Ba trong số này được liệt kê dưới đây. Về mặt kỹ thuật, bạn cũng có thể sử dụng hai cách đầu tiên để “phát hiện” xem một chuỗi có khớp với mẫu regex hay không (trong trường hợp đó, có lẽ bài viết này nên có tiêu đề “5 cách phát hiện xem chuỗi có khớp với biểu thức chính quy trong MySQL” thay vì chỉ “ 3 cách… ”).

Dù sao, đây là ba hàm regex khác:

  • Bạn có thể sử dụng REGEXP_INSTR() hàm để trả về chỉ số bắt đầu của một chuỗi con phù hợp với mẫu biểu thức chính quy.
  • REGEXP_SUBSTR() hàm trả về chuỗi con phù hợp với mẫu biểu thức chính quy đã cho.
  • REGEXP_REPLACE() hàm thay thế các lần xuất hiện của chuỗi con trong một chuỗi khớp với mẫu biểu thức chính quy đã cho.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL có tự động lập chỉ mục các cột khóa ngoại không?

  2. Cách trả lại vị trí của đối số trong danh sách đối số trong MySQL

  3. Không thể trả về kết quả từ thủ tục được lưu trữ bằng con trỏ Python

  4. PHP / MySQL Chèn giá trị rỗng

  5. Xóa các hàng trùng lặp khỏi bảng