MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Как REGEXP_INSTR() работи в MariaDB

В MariaDB, REGEXP_INSTR() функцията връща началния индекс на подниз, който съответства на шаблона на регулярния израз.

Индексът започва от 1 . Ако няма съвпадение, резултатът е 0 .

Синтаксис

Синтаксисът е така:

REGEXP_INSTR(subject, pattern)

Където subject е входният низ и pattern е шаблонът на регулярния израз за подниза.

Имайте предвид, че към момента на писане версията на MariaDB на REGEXP_INSTR() приема по-малко аргументи от REGEXP_INSTR() на MySQL . Версията на MySQL ви позволява да предоставите аргументи за началната позиция на търсенето, коя поява да търсите, кой тип позиция да върнете, както и начин за прецизиране на регулярния израз.

Пример

Ето един основен пример:

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

Резултат:

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

В този случай има съвпадение и поднизът започва от позиция 2.

Няма съвпадение

Ето пример, където няма съвпадение:

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

Резултат:

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

Няма съвпадение, така че резултатът е 0 . Няма съвпадение, защото посочих, че низът трябва да започва с подниз.

Нека го променим така, че да започнете с този подниз:

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

Резултат:

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

Чувствителност на регистрите

REGEXP_INSTR() функцията следва правилата за чувствителност към малки и големи букви на ефективното съпоставяне. Съпоставянето се извършва независимо от главните и малки букви за съпоставянията без малки и големи букви и чувствителни към малките и малки букви за съпоставянията, чувствителни към малки и големи букви и за двоични данни.

Ето един пример:

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";

Резултат:

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

Моето съпоставяне по подразбиране е независимо от главните букви. Другите два низа бяха принудени към съпоставяне, независимо от главни и малки букви, съответно.

Предоставяне на BINARY низът също е чувствителен към малки и големи букви (вижте по-долу).

Двоични низове

По подразбиране позициите се измерват в знаци, а не в байтове. Въпреки това, можете да прехвърлите многобайтов набор от знаци към BINARY за да получите измествания в байтове, ако е необходимо.

Пример:

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

Резултат:

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

Символът за авторско право използва два байта и затова в този пример получаваме резултат от 4 когато го прехвърляте към BINARY , в сравнение с 3 които получаваме иначе.

Въпреки че имайте предвид, че предаването на BINARY низът също влияе на чувствителността на главните и малки букви. С BINARY низове, символът с главни букви е различен от неговия аналог с малки букви:

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

Резултат:

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

Тук потърсих c с малки букви вместо главни букви и BINARY низът не съвпада.

Нулеви аргументи

Предаването на null тъй като всеки аргумент води до null :

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

Резултат:

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

Грешен брой аргументи

Предаването на грешен брой аргументи или липсата на аргументи води до грешка:

SELECT REGEXP_INSTR('Cat');

Резултат:

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. Използване на MySQL Galera Cluster Replication за създаване на гео-разпределен клъстер:Част втора

  2. Обявяване на ClusterControl 1.7.4:Репликация от клъстер към клъстер – Крайно възстановяване при бедствия

  3. MariaDB UCASE() Обяснено

  4. Как QUOTE() работи в MariaDB

  5. Как работи WEEKDAY() в MariaDB