In MariaDB, SUBSTR()
è sinonimo di SUBSTRING()
.
È una funzione di stringa incorporata che restituisce una sottostringa da una determinata stringa.
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:
SUBSTR(str,pos),
SUBSTR(str FROM pos),
SUBSTR(str,pos,len),
SUBSTR(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 SUBSTR('Good doggy', 6);
Risultato:
+-------------------------+ | SUBSTR('Good doggy', 6) | +-------------------------+ | doggy | +-------------------------+
Ecco lo stesso esempio, ma utilizzando la sintassi SQL standard:
SELECT SUBSTR('Good doggy' FROM 6);
Risultato:
+-----------------------------+ | SUBSTR('Good doggy' FROM 6) | +-----------------------------+ | doggy | +-----------------------------+
Lunghezza sottostringa
Ecco un esempio che specifica la lunghezza della sottostringa da estrarre:
SELECT SUBSTR('Good doggy', 6, 3);
Risultato:
+----------------------------+ | SUBSTR('Good doggy', 6, 3) | +----------------------------+ | dog | +----------------------------+
E qui sta usando la sintassi SQL standard:
SELECT SUBSTR('Good doggy' FROM 6 FOR 3);
Risultato:
+-----------------------------------+ | SUBSTR('Good doggy' FROM 6 FOR 3) | +-----------------------------------+ | dog | +-----------------------------------+
Posizione negativa
Specificando un valore negativo per la posizione, la posizione iniziale viene contata all'indietro dalla fine della stringa:
SELECT SUBSTR('Good doggy', -5);
Risultato:
+--------------------------+ | SUBSTR('Good doggy', -5) | +--------------------------+ | doggy | +--------------------------+
Una posizione negativa può essere utilizzata anche quando si utilizza la sintassi SQL standard:
SELECT SUBSTR('Good doggy' FROM -5 FOR 3);
Risultato:
+------------------------------------+ | SUBSTR('Good doggy' FROM -5 FOR 3) | +------------------------------------+ | dog | +------------------------------------+
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
SUBSTR('Good doggy', 0) AS "0",
SUBSTR('Good doggy', 1) AS "1";
Risultato:
+------------+------------+ | 0 | 1 | +------------+------------+ | Good doggy | Good doggy | +------------+------------+
Eccolo in modalità predefinita:
SET SQL_MODE=DEFAULT;
SELECT
SUBSTR('Good doggy', 0) AS "0",
SUBSTR('Good doggy', 1) AS "1";
Risultato:
+------+------------+ | 0 | 1 | +------+------------+ | | Good doggy | +------+------------+
Argomenti nulli
Se uno (o tutti) gli argomenti sono null
, il SUBSTR()
la funzione restituisce null
:
SELECT
SUBSTR(null, 3, 3),
SUBSTR('Doggy', null, 3),
SUBSTR('Doggy', 3, null),
SUBSTR(null, null, null);
Risultato:
+--------------------+--------------------------+--------------------------+--------------------------+ | SUBSTR(null, 3, 3) | SUBSTR('Doggy', null, 3) | SUBSTR('Doggy', 3, null) | SUBSTR(null, null, null) | +--------------------+--------------------------+--------------------------+--------------------------+ | NULL | NULL | NULL | NULL | +--------------------+--------------------------+--------------------------+--------------------------+
Argomenti mancanti
Chiamando SUBSTR()
senza passare alcun argomento genera un errore:
SELECT SUBSTR();
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