In MariaDB, CONCAT()
è una funzione di stringa incorporata che esegue una concatenazione di stringhe sui suoi argomenti. Restituisce la stringa che risulta dalla concatenazione dei suoi argomenti.
La concatenazione è l'operazione di unione di due o più stringhe end-to-end.
CONCAT()
accetta uno o più argomenti, tutti restituiti come una singola stringa concatenata.
Sintassi
La sintassi è questa:
CONCAT( str1, str2, ... )
Dove str1, str2, …
rappresentano gli argomenti stringa per i quali concatenare.
Esempio
Ecco un esempio di base:
SELECT CONCAT('Homer', 'Jay');
Risultato:
+------------------------+ | CONCAT('Homer', 'Jay') | +------------------------+ | HomerJay | +------------------------+
In questo caso, abbiamo concatenato due stringhe.
Eccolo di nuovo, ma questa volta aggiungiamo uno spazio in mezzo:
SELECT CONCAT('Homer', ' ', 'Jay');
Risultato:
+-----------------------------+ | CONCAT('Homer', ' ', 'Jay') | +-----------------------------+ | Homer Jay | +-----------------------------+
In questo caso, abbiamo concatenato tre stringhe.
Eccolo con cinque:
SELECT CONCAT('Homer', ' ', 'Jay', ' ', 'Simpson');
Risultato:
+---------------------------------------------+ | CONCAT('Homer', ' ', 'Jay', ' ', 'Simpson') | +---------------------------------------------+ | Homer Jay Simpson | +---------------------------------------------+
Stringhe binarie
Se uno qualsiasi degli argomenti è una stringa binaria, il risultato è una stringa binaria:
SELECT CONCAT(BINARY 'Homer', 'Jay');
Risultato:
+-------------------------------+ | CONCAT(BINARY 'Homer', 'Jay') | +-------------------------------+ | HomerJay | +-------------------------------+
Possiamo usare il COLLATION()
funzione per controllare la collazione del risultato:
SELECT COLLATION(CONCAT(BINARY 'Homer', 'Jay'));
Risultato:
+------------------------------------------+ | COLLATION(CONCAT(BINARY 'Homer', 'Jay')) | +------------------------------------------+ | binary | +------------------------------------------+
Se rimuoviamo il BINARY
operatore, otteniamo un risultato diverso:
SELECT COLLATION(CONCAT('Homer', 'Jay'));
Risultato:
+-----------------------------------+ | COLLATION(CONCAT('Homer', 'Jay')) | +-----------------------------------+ | utf8_general_ci | +-----------------------------------+
Inoltre, secondo la documentazione di MariaDB, gli argomenti numerici vengono convertiti nella loro forma di stringa binaria equivalente. Puoi evitarlo eseguendo un cast di tipo esplicito (usando CAST()
o CONVERT()
).
Argomenti nulli
Se uno qualsiasi degli argomenti è null
, CONCAT()
restituisce null
.
Tuttavia, c'è un'eccezione:quando in modalità Oracle (cioè sql_mode=ORACLE
), qualsiasi null
gli argomenti vengono semplicemente ignorati.
Per prima cosa, vediamo come CONCAT()
si comporta in modalità predefinita.
Imposta la nostra sessione in modalità predefinita:
SET SESSION sql_mode=DEFAULT;
Ora esegui CONCAT()
con un null
argomento:
SELECT CONCAT('Homer', ' ', null, ' ', 'Simpson');
Risultato:
+--------------------------------------------+ | CONCAT('Homer', ' ', null, ' ', 'Simpson') | +--------------------------------------------+ | NULL | +--------------------------------------------+
Come previsto, il risultato è null
.
Ora passiamo alla nostra sessione in modalità Oracle:
SET SESSION sql_mode=ORACLE;
E ora eseguiamo il precedente CONCAT()
esempio ancora:
SELECT CONCAT('Homer', ' ', null, ' ', 'Simpson');
Risultato:
+--------------------------------------------+ | CONCAT('Homer', ' ', null, ' ', 'Simpson') | +--------------------------------------------+ | Homer Simpson | +--------------------------------------------+
Questa volta ha ignorato il null
argomento e concatena tutti i restanti non null
argomenti. Se guardi da vicino, vedrai che concatena entrambi gli spazi, quindi c'è un doppio spazio tra Homer
e Simpson
.
Per un null
-alternativa sicura, usa CONCAT_WS()
. Quella funzione ignora null
valori, anche quando non in modalità Oracle.
In alternativa, puoi usare IFNULL()
per fornire un valore (stringa) alternativo per null
valori (come una stringa vuota).
Singolo argomento
Chiamando CONCAT()
con un solo argomento restituisce semplicemente quell'argomento:
SELECT CONCAT('Homer');
Risultato:
+-----------------+ | CONCAT('Homer') | +-----------------+ | Homer | +-----------------+
Argomento mancante
Chiamando CONCAT()
senza passare alcun argomento genera un errore:
SELECT CONCAT();
Risultato:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'CONCAT'