sql >> Databáze >  >> RDS >> MariaDB

Jak funguje REGEXP_SUBSTR() v MariaDB

V MariaDB, REGEXP_SUBSTR() funkce vrací podřetězec, který odpovídá danému vzoru regulárního výrazu.

Pokud neexistuje žádná shoda (tj. vstupní řetězec neobsahuje podřetězec), výsledkem je prázdný řetězec.

Syntaxe

Syntaxe vypadá takto:

REGEXP_SUBSTR(subject,pattern) 

Kde subject je vstupní řetězec a pattern je vzor regulárního výrazu pro podřetězec.

Všimněte si, že v době psaní tohoto článku byla MariaDB verze REGEXP_SUBSTR() přijímá méně argumentů než REGEXP_SUBSTR() MySQL . Verze MySQL vám umožňuje poskytnout argumenty pro počáteční pozici vyhledávání, který výskyt hledat, a také způsob, jak zpřesnit regulární výraz.

Příklad

Zde je základní příklad:

SELECT REGEXP_SUBSTR('Thailand and Laos', 'l.nd'); 

Výsledek:

+--------------------------------------------+| REGEXP_SUBSTR('Thajsko a Laos', 'l.nd') |+---------------------------------- ----------+| pozemek |+--------------------------------------------+ 

V tomto případě došlo ke shodě a podřetězec je vrácen.

Více shod

Ve výchozím nastavení, pokud je v řetězci více shod, je vrácena první:

SELECT REGEXP_SUBSTR('Lend for land', 'l.nd'); 

Výsledek:

+----------------------------------------+| REGEXP_SUBSTR('Půjčka na pozemek', 'l.nd') |+---------------------------------- ------+| Půjčit |+----------------------------------------+

Žádná shoda

Zde je příklad, kdy neexistuje žádná shoda:

SELECT REGEXP_SUBSTR('Lend for land', '^C'); 

Výsledek:

+--------------------------------------+| REGEXP_SUBSTR('Půjčka na pozemek', '^C') |+----------------------------------- ---+| |+--------------------------------------+

Neexistuje žádná shoda, takže výsledkem je prázdný řetězec.

Rozlišovat malá a velká písmena

REGEXP_SUBSTR() funkce se řídí pravidly rozlišování malých a velkých písmen efektivního řazení. Párování se provádí bez rozlišení malých a velkých písmen u porovnávání bez rozlišení malých a velkých písmen a u porovnávání rozlišujících malá a velká písmena a u binárních dat.

Zde je příklad:

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

Výsledek:

+------------+------------------+-------------- --+| Moje výchozí | Nerozlišují se malá a velká písmena | Rozlišují se malá a velká písmena |+------------+------------------+-------------- --+| Kočka | Kočka | |+------------+------------------+---------------- +

Moje výchozí řazení nerozlišuje malá a velká písmena. Zbývající dva řetězce byly nuceny používat řazení bez rozlišení malých a velkých písmen, respektive řazení rozlišující malá a velká písmena.

Poskytování BINARY řetězec také rozlišuje velká a malá písmena (viz níže).

Binární řetězce

Předávání BINARY řetězec také ovlivňuje citlivost. S BINARY řetězce, velký znak se liší od malého protějšku:

Příklad:

SELECT 
    REGEXP_SUBSTR('My Cats', 'c.t') AS "Character",
    REGEXP_SUBSTR(BINARY 'My Cats', 'c.t') AS "Binary"; 

Výsledek:

+-----------+--------+| Postava | Binární |+-----------+--------+| Kočka | |+-----------+--------+

Pokud změníme velikost písmen, stane se toto:

SELECT 
    REGEXP_SUBSTR('My Cats', 'C.t') AS "Character",
    REGEXP_SUBSTR(BINARY 'My Cats', 'C.t') AS "Binary"; 

Výsledek:

+-----------+--------+| Postava | Binární |+-----------+--------+| Kočka | Kočka |+-----------+--------+

Nulové argumenty

Předávání null protože jakýkoli argument má za následek null :

SELECT 
    REGEXP_SUBSTR(null, 'c.t') AS "1",
    REGEXP_SUBSTR('Cat', null) AS "2",
    REGEXP_SUBSTR(null, null) AS "3"; 

Výsledek:

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

Špatný počet argumentů

Předání nesprávného počtu argumentů nebo žádné argumenty vede k chybě:

SELECT REGEXP_SUBSTR('Cat'); 

Výsledek:

CHYBA 1582 (42000):Nesprávný počet parametrů ve volání nativní funkce 'REGEXP_SUBSTR'

  1. Implementace Optimistic Locking v Oracle

  2. Správa rolí a atributů rolí v PostgreSQL

  3. SQL mezi operátory

  4. Oracle Sequence začínající 2 místo 1