MariaDB
 sql >> Database >  >> RDS >> MariaDB

Come funziona REGEXP_SUBSTR() in MariaDB

In MariaDB, il REGEXP_SUBSTR() funzione restituisce la sottostringa che corrisponde al modello di espressione regolare specificato.

Se non c'è corrispondenza (cioè la stringa di input non contiene la sottostringa), il risultato è una stringa vuota.

Sintassi

La sintassi è questa:

REGEXP_SUBSTR(subject,pattern)

Dove subject è la stringa di input e il pattern è il modello di espressione regolare per la sottostringa.

Nota che, al momento della scrittura, la versione di MariaDB di REGEXP_SUBSTR() accetta meno argomenti rispetto a REGEXP_SUBSTR() di MySQL . La versione di MySQL consente di fornire argomenti per la posizione iniziale della ricerca, quale occorrenza cercare, nonché un modo per perfezionare l'espressione regolare.

Esempio

Ecco un esempio di base:

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

Risultato:

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

In questo caso c'è una corrispondenza e viene restituita la sottostringa.

Partite multiple

Per impostazione predefinita, se sono presenti più corrispondenze all'interno della stringa, viene restituita la prima:

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

Risultato:

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

Nessuna corrispondenza

Ecco un esempio in cui non c'è corrispondenza:

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

Risultato:

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

Non c'è corrispondenza, quindi il risultato è una stringa vuota.

Maiuscole/minuscole

Il REGEXP_SUBSTR() segue le regole di distinzione tra maiuscole e minuscole delle regole di confronto effettive. La corrispondenza viene eseguita senza distinzione tra maiuscole e minuscole per le regole di confronto senza distinzione tra maiuscole e minuscole e con distinzione tra maiuscole e minuscole per le regole di confronto con distinzione tra maiuscole e minuscole e per i dati binari.

Ecco un esempio:

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

Risultato:

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

Le mie regole di confronto predefinite non fanno distinzione tra maiuscole e minuscole. Le altre due stringhe sono state forzate rispettivamente a un confronto senza distinzione tra maiuscole e minuscole e con distinzione tra maiuscole e minuscole.

Fornire un BINARY anche la stringa fa distinzione tra maiuscole e minuscole (vedi sotto).

Stringhe binarie

Passaggio di un BINARY string influisce anche sulla distinzione tra maiuscole e minuscole. Con BINARY stringhe, un carattere maiuscolo è diverso dalla sua controparte minuscola:

Esempio:

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

Risultato:

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

Ecco cosa succede se cambiamo caso:

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

Risultato:

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

Argomenti nulli

Passaggio null poiché qualsiasi argomento risulta in null :

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

Risultato:

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

Numero di argomenti errato

Il passaggio di un numero errato di argomenti o di nessun argomento genera un errore:

SELECT REGEXP_SUBSTR('Cat');

Risultato:

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