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