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'