In MariaDB, SUBSTRING() è una funzione di stringa incorporata che restituisce una sottostringa da una determinata stringa.
SUBSTRING() richiede almeno due argomenti; la stringa e la posizione da cui estrarre la sottostringa. Accetta anche un terzo argomento opzionale che consente di specificare la lunghezza della sottostringa.
Sintassi
La sintassi assume le seguenti forme:
SUBSTRING(str,pos),
SUBSTRING(str FROM pos),
SUBSTRING(str,pos,len),
SUBSTRING(str FROM pos FOR len)
Dove str è la stringa, pos è la posizione iniziale della sottostringa e len è il numero di caratteri da estrarre.
I due moduli che utilizzano il FROM parola chiave sono sintassi SQL standard.
Esempio
Ecco un esempio di base:
SELECT SUBSTRING('Big fat cat', 5); Risultato:
+-----------------------------+
| SUBSTRING('Big fat cat', 5) |
+-----------------------------+
| fat cat |
+-----------------------------+ Ecco lo stesso esempio, ma utilizzando la sintassi SQL standard:
SELECT SUBSTRING('Big fat cat' FROM 5); Risultato:
+---------------------------------+
| SUBSTRING('Big fat cat' FROM 5) |
+---------------------------------+
| fat cat |
+---------------------------------+ Lunghezza sottostringa
Ecco un esempio che specifica la lunghezza della sottostringa da estrarre:
SELECT SUBSTRING('Big fat cat', 5, 3); Risultato:
+--------------------------------+
| SUBSTRING('Big fat cat', 5, 3) |
+--------------------------------+
| fat |
+--------------------------------+ E qui sta usando la sintassi SQL standard:
SELECT SUBSTRING('Big fat cat' FROM 5 FOR 3); Risultato:
+---------------------------------------+
| SUBSTRING('Big fat cat' FROM 5 FOR 3) |
+---------------------------------------+
| fat |
+---------------------------------------+ Posizione negativa
Specificando un valore negativo per la posizione, la posizione iniziale viene contata all'indietro dalla fine della stringa:
SELECT SUBSTRING('Big fat cat', -3); Risultato:
+------------------------------+
| SUBSTRING('Big fat cat', -3) |
+------------------------------+
| cat |
+------------------------------+ Una posizione negativa può essere utilizzata anche quando si utilizza la sintassi SQL standard:
SELECT SUBSTRING('Big fat cat' FROM -7 FOR 3); Risultato:
+----------------------------------------+
| SUBSTRING('Big fat cat' FROM -7 FOR 3) |
+----------------------------------------+
| fat |
+----------------------------------------+ In questo caso ho anche impostato una lunghezza per la sottostringa.
Modalità Oracle
In modalità Oracle, una posizione iniziale di 0 (zero) viene trattato come 1 . Tuttavia, una posizione iniziale di 1 viene anche trattato come 1 .
Questo è in contrasto con altre modalità, dove 0 restituirà una stringa vuota.
Esempio:
SET SQL_MODE=ORACLE;
SELECT
SUBSTRING('Big fat cat', 0) AS "0",
SUBSTRING('Big fat cat', 1) AS "1"; Risultato:
+-------------+-------------+ | 0 | 1 | +-------------+-------------+ | Big fat cat | Big fat cat | +-------------+-------------+
Eccolo in modalità predefinita:
SET SQL_MODE=DEFAULT;
SELECT
SUBSTRING('Big fat cat', 0) AS "0",
SUBSTRING('Big fat cat', 1) AS "1"; Risultato:
+------+-------------+ | 0 | 1 | +------+-------------+ | | Big fat cat | +------+-------------+
Argomenti nulli
Se uno (o tutti) gli argomenti sono null , il SUBSTRING() la funzione restituisce null :
SELECT
SUBSTRING(null, 3, 3),
SUBSTRING('Coffee', null, 3),
SUBSTRING('Coffee', 3, null),
SUBSTRING(null, null, null); Risultato:
+-----------------------+------------------------------+------------------------------+-----------------------------+
| SUBSTRING(null, 3, 3) | SUBSTRING('Coffee', null, 3) | SUBSTRING('Coffee', 3, null) | SUBSTRING(null, null, null) |
+-----------------------+------------------------------+------------------------------+-----------------------------+
| NULL | NULL | NULL | NULL |
+-----------------------+------------------------------+------------------------------+-----------------------------+ Argomenti mancanti
Chiamando SUBSTRING() senza passare alcun argomento genera un errore:
SELECT SUBSTRING(); Risultato:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1