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

Come funziona MID() in MariaDB

In MariaDB, MID() è sinonimo di SUBSTRING() . Restituisce una sottostringa da una determinata stringa.

Secondo la documentazione di MariaDB è sinonimo di SUBSTRING(str,pos,len) sintassi di SUBSTRING() , tuttavia, i miei test dimostrano che funziona con tutti i vari moduli.

Sintassi

Secondo la documentazione di MariaDB, la sintassi è questa:

MID(str,pos,len)

Tuttavia, ho scoperto che funziona con i seguenti moduli (che sono gli stessi che SUBSTRING() supporta):

MID(str,pos), 
MID(str FROM pos), 
MID(str,pos,len),
MID(str FROM pos FOR len)

Dove str è la stringa, pos è la posizione iniziale della sottostringa e len è il numero di caratteri da estrarre.

Esempio

Ecco un esempio di base:

SELECT MID('Drink your beer', 7);

Risultato:

+---------------------------+
| MID('Drink your beer', 7) |
+---------------------------+
| your beer                 |
+---------------------------+

Ecco lo stesso esempio, ma usando il FROM sintassi:

SELECT MID('Drink your beer' FROM 7);

Risultato:

+-------------------------------+
| MID('Drink your beer' FROM 7) |
+-------------------------------+
| your beer                     |
+-------------------------------+

Lunghezza sottostringa

Ecco un esempio che specifica la lunghezza della sottostringa da estrarre. Questa è l'unica sintassi che la documentazione di MariaDB cita per MID() funzione.

SELECT MID('Drink your beer', 7, 4);

Risultato:

+------------------------------+
| MID('Drink your beer', 7, 4) |
+------------------------------+
| your                         |
+------------------------------+

E qui sta usando FROM...FOR sintassi:

SELECT MID('Drink your beer' FROM 7 FOR 4);

Risultato:

+-------------------------------------+
| MID('Drink your beer' FROM 7 FOR 4) |
+-------------------------------------+
| your                                |
+-------------------------------------+

Posizione negativa

Specificando un valore negativo per la posizione, la posizione iniziale viene contata all'indietro dalla fine della stringa:

SELECT MID('Drink your beer', -9);

Risultato:

+----------------------------+
| MID('Drink your beer', -9) |
+----------------------------+
| your beer                  |
+----------------------------+

Una posizione negativa può essere utilizzata anche quando si utilizza il FROM sintassi:

SELECT MID('Drink your beer' FROM -9 FOR 4);

Risultato:

+--------------------------------------+
| MID('Drink your beer' FROM -9 FOR 4) |
+--------------------------------------+
| your                                 |
+--------------------------------------+

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 
    MID('Drink your beer', 0) AS "0",
    MID('Drink your beer', 1) AS "1";

Risultato:

+-----------------+-----------------+
| 0               | 1               |
+-----------------+-----------------+
| Drink your beer | Drink your beer |
+-----------------+-----------------+

Eccolo in modalità predefinita:

SET SQL_MODE=DEFAULT;
SELECT 
    MID('Drink your beer', 0) AS "0",
    MID('Drink your beer', 1) AS "1";

Risultato:

+------+-----------------+
| 0    | 1               |
+------+-----------------+
|      | Drink your beer |
+------+-----------------+

Argomenti nulli

Se uno (o tutti) gli argomenti sono null , il MID() la funzione restituisce null :

SELECT 
    MID(null, 3, 3),
    MID('Beer', null, 3),
    MID('Beer', 3, null),
    MID(null, null, null);

Risultato:

+-----------------+----------------------+----------------------+-----------------------+
| MID(null, 3, 3) | MID('Beer', null, 3) | MID('Beer', 3, null) | MID(null, null, null) |
+-----------------+----------------------+----------------------+-----------------------+
| NULL            | NULL                 | NULL                 | NULL                  |
+-----------------+----------------------+----------------------+-----------------------+

Argomenti mancanti

Chiamando MID() senza passare alcun argomento genera un errore:

SELECT MID();

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