Trong MariaDB, REGEXP_SUBSTR()
hàm trả về chuỗi con phù hợp với mẫu biểu thức chính quy đã cho.
Nếu không có kết quả khớp nào (tức là chuỗi đầu vào không chứa chuỗi con), kết quả là một chuỗi trống.
Cú pháp
Cú pháp như sau:
REGEXP_SUBSTR(subject,pattern)
Ở đâu subject
là chuỗi đầu vào và pattern
là mẫu biểu thức chính quy cho chuỗi con.
Lưu ý rằng, tại thời điểm viết bài, phiên bản REGEXP_SUBSTR()
của MariaDB chấp nhận ít đối số hơn REGEXP_SUBSTR()
của MySQL . Phiên bản của MySQL cho phép bạn cung cấp các đối số cho vị trí bắt đầu của tìm kiếm, vị trí xuất hiện để tìm kiếm, cũng như một cách để tinh chỉnh biểu thức chính quy.
Ví dụ
Đây là một ví dụ cơ bản:
SELECT REGEXP_SUBSTR('Thailand and Laos', 'l.nd');
Kết quả:
+ -------------------------------------------- + | REGEXP_SUBSTR ('Thái Lan và Lào', 'l.nd') | + ---------------------------------- ---------- + | đất | + -------------------------------------------- +Trong trường hợp này, có một kết quả khớp và chuỗi con được trả về.
Nhiều Kết hợp
Theo mặc định, nếu có nhiều kết quả phù hợp trong chuỗi, kết quả đầu tiên được trả về:
SELECT REGEXP_SUBSTR('Lend for land', 'l.nd');
Kết quả:
+ ---------------------------------------- + | REGEXP_SUBSTR ('Cho vay đất', 'l.nd') | + ---------------------------------- ------ + | Cho vay | + ---------------------------------------- +Không phù hợp
Dưới đây là một ví dụ mà không có kết quả phù hợp nào:
SELECT REGEXP_SUBSTR('Lend for land', '^C');
Kết quả:
+ -------------------------------------- + | REGEXP_SUBSTR ('Cho vay đất', '^ C') | + ----------------------------------- --- + | | + -------------------------------------- +Không có kết quả phù hợp nào nên kết quả là một chuỗi trống.
Phân biệt chữ hoa chữ thường
REGEXP_SUBSTR()
hàm tuân theo các quy tắc phân biệt chữ hoa chữ thường của phép đối chiếu hiệu quả. Đối sánh được thực hiện phân biệt chữ hoa chữ thường đối với các đối chiếu phân biệt chữ hoa chữ thường và phân biệt chữ hoa chữ thường đối với các đối chiếu phân biệt chữ hoa chữ thường và đối với dữ liệu nhị phân.Đây là một ví dụ:
SELECT REGEXP_SUBSTR('My Cats', 'c.t') AS "My Default", REGEXP_SUBSTR(_latin7'My Cats' COLLATE latin7_general_ci, 'c.t') AS "Case Insensitive", REGEXP_SUBSTR(_latin7'My Cats' COLLATE latin7_general_cs, 'c.t') AS "Case Sensitive";
Kết quả:
+ ------------ + ------------------ + -------------- - + | Mặc định của tôi | Không phân biệt chữ hoa chữ thường | Phân biệt chữ hoa chữ thường | + ------------ + ------------------ + -------------- - + | Con mèo | Con mèo | | + ------------ + ------------------ + ---------------- +Đối chiếu mặc định của tôi là không phân biệt chữ hoa chữ thường. Hai chuỗi còn lại buộc phải đối chiếu phân biệt chữ hoa chữ thường và phân biệt chữ hoa chữ thường.
Cung cấp
BINARY
chuỗi cũng phân biệt chữ hoa chữ thường (xem bên dưới).Chuỗi nhị phân
Chuyển
BINARY
chuỗi cũng ảnh hưởng đến độ phân biệt chữ hoa và chữ thường. VớiBINARY
chuỗi, một ký tự viết hoa khác với ký tự viết thường của nó:Ví dụ:
SELECT REGEXP_SUBSTR('My Cats', 'c.t') AS "Character", REGEXP_SUBSTR(BINARY 'My Cats', 'c.t') AS "Binary";
Kết quả:
+ ----------- + -------- + | Nhân vật | Nhị phân | + ----------- + -------- + | Con mèo | | + ----------- + -------- +Đây là những gì sẽ xảy ra nếu chúng tôi thay đổi trường hợp:
SELECT REGEXP_SUBSTR('My Cats', 'C.t') AS "Character", REGEXP_SUBSTR(BINARY 'My Cats', 'C.t') AS "Binary";
Kết quả:
+ ----------- + -------- + | Nhân vật | Nhị phân | + ----------- + -------- + | Con mèo | Mèo | + ----------- + -------- +Đối số rỗng
Chuyển
null
vì bất kỳ đối số nào dẫn đếnnull
:SELECT REGEXP_SUBSTR(null, 'c.t') AS "1", REGEXP_SUBSTR('Cat', null) AS "2", REGEXP_SUBSTR(null, null) AS "3";
Kết quả:
+ ------ + ------ + ------ + | 1 | 2 | 3 | + ------ + ------ + ------ + | NULL | NULL | KHÔNG | + ------ + ------ + ------ +Số lượng đối số sai
Truyền sai số đối số hoặc không có đối số, dẫn đến lỗi:
SELECT REGEXP_SUBSTR('Cat');
Kết quả:
ERROR 1582 (42000):Số lượng tham số không chính xác trong lệnh gọi hàm gốc 'REGEXP_SUBSTR'