01/10/2018, 16:40

Bài 19: Sử dụng Regular expression trong MYSQL

Trong loạt các bài viết trước mình đã viết về Regular Expression . Trong bài viết này mình sẽ nói về Regular expression được sử dụng thế nào trong truy vấn dữ liệu. Mình sẽ nhắc lại một số ký hiệu Meta được sử dụng trong MySQL. Những ký tự này mình đã trình bày tại các quy tắc cơ bản của ...

Trong loạt các bài viết trước mình đã viết về Regular Expression. Trong bài viết này mình sẽ nói về Regular expression được sử dụng thế nào trong truy vấn dữ liệu.

Mình sẽ nhắc lại một số ký hiệu Meta được sử dụng trong MySQL. Những ký tự này mình đã trình bày tại các quy tắc cơ bản của regular expression được sử dụng trong PHP.

STT Ký hiệu Ý nghĩa
1 ^ Tìm kiếm giá trị từ đầu chuỗi nguồn
2  $  Tìm kiếm giá trị từ cuối chuỗi nguồn
3  .  Đại diện cho một ký tự bất ký
4  *  0 hoặc nhiều lần xuất hiện
5  +  1 hoặc nhiều lần xuất hiện
6  ?  0 hoặc 1 lần xuất hiện
7 |  Sự lựa chọn
8  {n,m}  Số lần xuất hiện của ký tự từ n đến m lần

Sử dụng biểu thức chính quy trong MySQL được chia thành 3 nhóm từ khóa sau:

  • NOT_REGEXP
  • REGEXP
  • RLIKE

Trong nội dung này trình bày việc sử dụng biểu thức chính quy với từ khóa REGEXP.

Kết quả tìm kiếm sẽ trả về 1 nếu tìm thấy hoặc trả về 0 nếu không tìm thấy.

1. Ký hiệu ^ : tìm từ đầu chuỗi nguồn

SELECT 'MySQL is easy' REGEXP '^Mya';

2. Ký hiệu $ : tìm từ cuối chuỗi nguồn

SELECT 'MySQL is easy 1' REGEXP 'easy$';

3. Ký hiệu . : đại diện một ký tự bất kỳ

SELECT 'MySQL' REGEXP '^M.SQL$';

4. Ký hiệu * : ký tự xuất hiện 0 hoặc nhiều lần

SELECT 'MyyyySQL' REGEXP '^M.*SQL$'; -- MSQL 
SELECT 'MyyyySQL' REGEXP '^M....SQL$';

5. Ký hiệu + : ký tự xuất hiện 1 hoặc nhiều lần

SELECT 'MyyyySQL' REGEXP '^M.+SQL$'; -- M.SQL M..SQL

6. Ký hiệu ? : ký tự xuất hiện 0 hoặc 1 lần

SELECT 'MyyyySQL' REGEXP '^M.?SQL$'; -- MSQL M.SQL

7.  Ký hiệu | : sự lựa chọn (hoặc)

SELECT 'Mi' REGEXP '^(My|Mi)$';
8. {n.m} Số lần xuất hiện của ký tự

  • a* tương đương a{0}
  • a+ tương đương a{1};
  • a? tương đương a{0,1}
SELECT 'abcdbcde' REGEXP 'a(bcd){1,5}e'; -- abcde abcdbcde

Tổng kết.

Nếu bạn đã tìm hiểu về Regular expression thì trên đây là những quy tắc không có gì lạ cả. Ở mỗi ngôn ngữ thì nó có cách viết và sử dụng khác nhau. Nhưng chung quy lại nó đều giống nhau mà thôi :)

    Vũ Văn Thanh

    12 chủ đề

    2597 bài viết

    Cùng chủ đề
    0