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

Cách REGEXP_INSTR () hoạt động trong MariaDB

Trong MariaDB, REGEXP_INSTR() hàm trả về chỉ mục bắt đầu của một chuỗi con phù hợp với mẫu biểu thức chính quy.

Chỉ mục bắt đầu từ 1 . Nếu không có kết quả phù hợp, kết quả là 0 .

Cú pháp

Cú pháp như sau:

REGEXP_INSTR(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_INSTR() của MariaDB chấp nhận ít đối số hơn REGEXP_INSTR() 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, loại vị trí nào sẽ trả về, 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_INSTR('Cat', 'at');

Kết quả:

+---------------------------+
| REGEXP_INSTR('Cat', 'at') |
+---------------------------+
|                         2 |
+---------------------------+

Trong trường hợp này, có một kết quả khớp và chuỗi con bắt đầu ở vị trí 2.

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_INSTR('Cat', '^at');

Kết quả:

+----------------------------+
| REGEXP_INSTR('Cat', '^at') |
+----------------------------+
|                          0 |
+----------------------------+

Không có kết quả phù hợp nào nên kết quả là 0 . Không có kết quả khớp nào vì tôi đã chỉ định rằng chuỗi phải bắt đầu bằng chuỗi con.

Hãy thay đổi nó để nó không bắt đầu với chuỗi con đó:

SELECT REGEXP_INSTR('at', '^at');

Kết quả:

+---------------------------+
| REGEXP_INSTR('at', '^at') |
+---------------------------+
|                         1 |
+---------------------------+

Phân biệt chữ hoa chữ thường

REGEXP_INSTR() 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_INSTR('Cat', 'c') AS "My Default",
    REGEXP_INSTR(_latin7'Cat' COLLATE latin7_general_ci, 'c') AS "Case Insensitive",
    REGEXP_INSTR(_latin7'Cat' COLLATE latin7_general_cs, 'c') AS "Case Sensitive";

Kết quả:

+------------+------------------+----------------+
| My Default | Case Insensitive | Case Sensitive |
+------------+------------------+----------------+
|          1 |                1 |              0 |
+------------+------------------+----------------+

Đố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

Theo mặc định, các vị trí được đo bằng ký tự thay vì byte. Tuy nhiên, bạn có thể truyền một ký tự nhiều byte được đặt thành BINARY để lấy hiệu số theo byte nếu bạn cần.

Ví dụ:

SELECT 
    REGEXP_INSTR('© Cat', 'C') AS "Character",
    REGEXP_INSTR(BINARY '© Cat', 'C') AS "Binary";

Kết quả:

+-----------+--------+
| Character | Binary |
+-----------+--------+
|         3 |      4 |
+-----------+--------+

Biểu tượng bản quyền sử dụng hai byte và do đó trong ví dụ này, chúng tôi nhận được kết quả là 4 khi truyền nó tới BINARY , so với 3 mà chúng tôi nhận được theo cách khác.

Mặc dù lưu ý rằng việc chuyển một BINARY chuỗi cũng ảnh hưởng đến độ phân biệt chữ hoa và chữ thường. Với BINARY chuỗi, một ký tự viết hoa khác với ký tự viết thường của nó:

SELECT 
    REGEXP_INSTR('© Cat', 'c') AS "Character",
    REGEXP_INSTR(BINARY '© Cat', 'c') AS "Binary";

Kết quả:

+-----------+--------+
| Character | Binary |
+-----------+--------+
|         3 |      0 |
+-----------+--------+

Ở đây, tôi đã tìm kiếm một chữ thường c thay vì viết hoa và BINARY chuỗi không khớp.

Đối số rỗng

Chuyển null vì bất kỳ đối số nào dẫn đến null :

SELECT 
    REGEXP_INSTR(null, 'c') AS "1",
    REGEXP_INSTR('Cat', null) AS "2",
    REGEXP_INSTR(null, null) AS "3";

Kết quả:

+------+------+------+
| 1    | 2    | 3    |
+------+------+------+
| NULL | NULL | NULL |
+------+------+------+

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_INSTR('Cat');

Kết quả:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'REGEXP_INSTR'

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MariaDB DATABASE () Giải thích

  2. 2 cách để có được bộ ký tự có sẵn trong MariaDB

  3. Cách cắt ngắn văn bản bằng dấu chấm lửng trong MariaDB

  4. Cách lập lịch sao lưu cơ sở dữ liệu với ClusterControl

  5. 4 chức năng để trả về tháng từ một ngày trong MariaDB