01/10/2018, 15:34

Bài 8: MySQL Regexps

Bạn đã thấy pattern MySQL trong phát biểu LIKE …%. MySQL hổ trợ các kiểu pattern khác dựa vào biểu thức “regular expression” và toàn tử REGEXP. Nếu bạn đã có kiến thức về PHP ơr PERL, thì rất đơn giản cho bạn để hiểu bởi vì cái đống này cũng rất giống regular expression của các ...

Bạn đã thấy pattern MySQL trong phát biểu LIKE …%. MySQL hổ trợ các kiểu pattern khác dựa vào biểu thức “regular expression” và toàn tử REGEXP. Nếu bạn đã có kiến thức về PHP ơr PERL, thì rất đơn giản cho bạn để hiểu bởi vì cái đống này cũng rất giống regular expression của các ngôn ngữ đó.

Sau đây là bảng pattern, mà có thể được sử dụng với toán tử REGEXP.

Pattern Mô tả
^ Bắt đầu chuỗi
$ Kết thúc chuỗi
. Ký tự bất kỳ bao gồm ký tự return và newline
[…] Bất kỳ ký tự được liệt kê trong 2 ngoặc
[^…] Bất kỳ ký tự không nằm trong 2 ngoặc , [^xyz] khớp bất kỳ ký tự không phải xyz
p1|p2|p3 Bất kỳ pattern khớp với p1, p2 hoặc p3
* Khớp 0 hoặc nhiều
+ Khớp 1 hoặc nhiều
{n} Khớp n lần
{m,n} Đi từ m tới n lần.
[:space:] Cho khoảng trắng
[:upper:] Cho ký tự hoa
[:alpha:] Cho ký tự thôi

Ví dụ để dể hiểu:

Bây giờ dựa vào bảng ở trên, bạn có thể phân chia các kiểu query khác nhau để phù  hợp yêu cầu của bạn. Ở đây, tôi liệt kê vài cái cho bạn hiểu. Xem như chúng ta có bảng person_tbl và nó có field gọi là  name:

Giờ query tìm tất các tên bắt đầu với ‘st’.

Mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘^st’;

Query tìm tất cả tên kết thúc là ‘ok’

Mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘ok$’;

Query tìm tất cả tên mà chứa đựng ‘osama’

Mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘osama’;

Query tìm tất cả name bắt đầu với damme và kết thúc với ok

Mysql> SELECT name FROM person_tbl WHERE name  REGEXP ‘^[damme]|ok$’;

Nếu bạn muốn phân biệt hoa thường trong tìm kiếm, chúng ta thêm toán tử BINARY.

Select * FROM person_tbl WHERE name REGEXP BINARY ‘^C’; //bắt đầu tới C

Query tìm tên chứa đựng chính xác 10 ký tự, ta sử dụng ‘^’ và $ để khớp với bắt đầu và kết thúc tên, và lặp lại {10} lần.

SELECT * FROM person_tbl WHERE name REGEXP ‘^.{10}$’; // HMS Bounty, Pont Yacht

Bùi Văn Nam

27 chủ đề

7090 bài viết

Cùng chủ đề
0