sql >> Database >  >> RDS >> MariaDB

Hoe REGEXP_SUBSTR() werkt in MariaDB

In MariaDB, de REGEXP_SUBSTR() functie retourneert de subtekenreeks die overeenkomt met het gegeven patroon voor reguliere expressies.

Als er geen overeenkomst is (d.w.z. de invoertekenreeks bevat de subtekenreeks niet), is het resultaat een lege tekenreeks.

Syntaxis

De syntaxis gaat als volgt:

REGEXP_SUBSTR(subject,pattern)

Waar subject is de invoerreeks en pattern is het reguliere expressiepatroon voor de subtekenreeks.

Merk op dat, op het moment van schrijven, MariaDB's versie van REGEXP_SUBSTR() accepteert minder argumenten dan MySQL's REGEXP_SUBSTR() . Met de versie van MySQL kunt u argumenten opgeven voor de startpositie van de zoekopdracht, naar welke instantie moet worden gezocht, evenals een manier om de reguliere expressie te verfijnen.

Voorbeeld

Hier is een eenvoudig voorbeeld:

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

Resultaat:

+--------------------------------------------+
| REGEXP_SUBSTR('Thailand and Laos', 'l.nd') |
+--------------------------------------------+
| land                                       |
+--------------------------------------------+

In dit geval is er een overeenkomst en wordt de subtekenreeks geretourneerd.

Meerdere wedstrijden

Als er meerdere overeenkomsten in de tekenreeks zijn, wordt standaard de eerste geretourneerd:

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

Resultaat:

+----------------------------------------+
| REGEXP_SUBSTR('Lend for land', 'l.nd') |
+----------------------------------------+
| Lend                                   |
+----------------------------------------+

Geen overeenkomst

Hier is een voorbeeld waarbij er geen overeenkomst is:

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

Resultaat:

+--------------------------------------+
| REGEXP_SUBSTR('Lend for land', '^C') |
+--------------------------------------+
|                                      |
+--------------------------------------+

Er is geen overeenkomst, dus het resultaat is een lege tekenreeks.

Hoofdlettergevoeligheid

De REGEXP_SUBSTR() functie volgt de hoofdlettergevoeligheidsregels van de effectieve sortering. Het matchen wordt hoofdletterongevoelig uitgevoerd voor hoofdletterongevoelige sorteringen en hoofdlettergevoelig voor hoofdlettergevoelige sorteringen en voor binaire gegevens.

Hier is een voorbeeld:

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

Resultaat:

+------------+------------------+----------------+
| My Default | Case Insensitive | Case Sensitive |
+------------+------------------+----------------+
| Cat        | Cat              |                |
+------------+------------------+----------------+

Mijn standaardsortering is niet hoofdlettergevoelig. De andere twee strings werden gedwongen om respectievelijk hoofdlettergevoelig en hoofdlettergevoelig te sorteren.

Het verstrekken van een BINARY string is ook hoofdlettergevoelig (zie hieronder).

Binaire strings

Een BINARY doorgeven string heeft ook invloed op de hoofdlettergevoeligheid. Met BINARY strings, is een hoofdletter anders dan zijn tegenhanger in kleine letters:

Voorbeeld:

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

Resultaat:

+-----------+--------+
| Character | Binary |
+-----------+--------+
| Cat       |        |
+-----------+--------+

Dit is wat er gebeurt als we de zaak wijzigen:

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

Resultaat:

+-----------+--------+
| Character | Binary |
+-----------+--------+
| Cat       | Cat    |
+-----------+--------+

Nullargumenten

Doorgeven van null aangezien elk argument resulteert in null :

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

Resultaat:

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

Onjuist aantal argumenten

Het doorgeven van het verkeerde aantal argumenten of geen argumenten, resulteert in een fout:

SELECT REGEXP_SUBSTR('Cat');

Resultaat:

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

  1. hoe vind je alle indexen en hun kolommen voor tabellen, views en synoniemen in oracle

  2. Snelle manier om het aantal rijen van een tabel te ontdekken in PostgreSQL

  3. COALESCE() Functie in Oracle

  4. Hoe pascal zaak te forceren met Oracle's Entity Framework-ondersteuning?