В MariaDB, REGEXP_SUBSTR() функцията връща подниз, който съответства на дадения модел на регулярен израз.
Ако няма съвпадение (т.е. входният низ не съдържа подниза), резултатът е празен низ.
Синтаксис
Синтаксисът е така:
REGEXP_SUBSTR(subject,pattern)
Където subject е входният низ и pattern е шаблонът на регулярния израз за подниза.
Имайте предвид, че към момента на писане версията на MariaDB на REGEXP_SUBSTR() приема по-малко аргументи от REGEXP_SUBSTR() на MySQL . Версията на MySQL ви позволява да предоставите аргументи за началната позиция на търсенето, коя поява да търсите, както и начин за прецизиране на регулярния израз.
Пример
Ето един основен пример:
SELECT REGEXP_SUBSTR('Thailand and Laos', 'l.nd'); Резултат:
+----------------------------------------------+| REGEXP_SUBSTR('Тайланд и Лаос', 'l.nd') |+---------------------------------- ----------+| земя |+----------------------------------------------+предварително>
В този случай има съвпадение и поднизът се връща.
Множество съвпадения
По подразбиране, ако има няколко съвпадения в низа, първото се връща:
SELECT REGEXP_SUBSTR('Lend for land', 'l.nd');
Резултат:
+---------------------------------------+| REGEXP_SUBSTR('Заем за земя', 'l.nd') |+---------------------------------- ------+| Давам на заем |+-----------------------------------+ Няма съвпадение
Ето пример, където няма съвпадение:
SELECT REGEXP_SUBSTR('Lend for land', '^C');
Резултат:
+----------------------------------------+| REGEXP_SUBSTR('Заем за земя', '^C') |+---------------------------------- ---+| |+----------------------------------------+
Няма съвпадение, така че резултатът е празен низ.
Чувствителност на регистрите
REGEXP_SUBSTR() функцията следва правилата за чувствителност към малки и големи букви на ефективното съпоставяне. Съпоставянето се извършва независимо от главните и малки букви за съпоставянията без малки и големи букви и чувствителни към малките букви за съпоставянията, чувствителни към малки и големи букви и за двоични данни.
Ето един пример:
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";
Резултат:
+------------+-----------------+-------------- --+| Моята по подразбиране | Нечувствителни към главни букви | Чувствителен на главни букви |+------------+-----------------+-------------- --+| Котка | Котка | |+-----------+------------------+---------------- +
Моето съпоставяне по подразбиране е независимо от главните букви. Другите два низа бяха принудени към съпоставяне, независимо от главните и главни букви, съответно.
Предоставяне на BINARY низът също е чувствителен към малки и големи букви (вижте по-долу).
Двоични низове
Подаване на BINARY низът също влияе на чувствителността на главните и малки букви. С BINARY низове, символът с главни букви е различен от неговия аналог с малки букви:
Пример:
SELECT
REGEXP_SUBSTR('My Cats', 'c.t') AS "Character",
REGEXP_SUBSTR(BINARY 'My Cats', 'c.t') AS "Binary";
Резултат:
+-----------+-------+| Характер | Двоичен |+-----------+-------+| Котка | |+----------+-------+
Ето какво се случва, ако променим регистъра:
SELECT
REGEXP_SUBSTR('My Cats', 'C.t') AS "Character",
REGEXP_SUBSTR(BINARY 'My Cats', 'C.t') AS "Binary";
Резултат:
+-----------+-------+| Характер | Двоичен |+-----------+-------+| Котка | Котка |+----------+-------+
Нулеви аргументи
Предаването на null тъй като всеки аргумент води до null :
SELECT
REGEXP_SUBSTR(null, 'c.t') AS "1",
REGEXP_SUBSTR('Cat', null) AS "2",
REGEXP_SUBSTR(null, null) AS "3";
Резултат:
+------+------+------+| 1 | 2 | 3 |+------+------+------+| NULL | NULL | NULL |+------+------+------+
Грешен брой аргументи
Предаването на грешен брой аргументи или липсата на аргументи води до грешка:
SELECT REGEXP_SUBSTR('Cat');
Резултат:
ГРЕШКА 1582 (42000):Неправилен брой параметри в извикването на естествена функция „REGEXP_SUBSTR“