In MySQL, il CONCAT_WS()
La funzione consente di aggiungere un separatore alle stringhe concatenate. Se usi solo CONCAT()
funzione, non avresti separatore (a meno che tu non abbia aggiunto esplicitamente un separatore come argomento tra ogni argomento di stringa).
Un uso comune di CONCAT_WS()
la funzione è creare un elenco delimitato da virgole.
Ecco un esempio:
SELECT CONCAT_WS(',','Sydney', 'Australia') AS Location;
Risultato:
+------------------+ | Location | +------------------+ | Sydney,Australia | +------------------+
E puoi aggiungere uno spazio lì dentro se vuoi:
SELECT CONCAT_WS(', ','Sydney', 'Australia') AS Location;
Risultato:
+-------------------+ | Location | +-------------------+ | Sydney, Australia | +-------------------+
Il separatore
Non c'è niente da dire che il separatore deve essere una virgola. Il separatore può essere qualsiasi stringa.
Ecco lo stesso esempio del precedente, tranne per il fatto che questo utilizza un separatore diverso.
SELECT CONCAT_WS(' - ','Paris', 'France') AS Location;
Risultato:
+----------------+ | Location | +----------------+ | Paris - France | +----------------+
Un esempio di database
Ecco un esempio di recupero di dati da un database e di combinazione di due colonne in una, separate da una virgola:
SELECT CONCAT_WS(', ', city.Name, country.Name ) AS Location FROM city INNER JOIN country ON city.CountryCode = country.Code WHERE country.Code = 'NZL';
Risultato:
+---------------------------+ | Location | +---------------------------+ | Auckland, New Zealand | | Christchurch, New Zealand | | Manukau, New Zealand | | North Shore, New Zealand | | Waitakere, New Zealand | | Wellington, New Zealand | | Dunedin, New Zealand | | Hamilton, New Zealand | | Lower Hutt, New Zealand | +---------------------------+
Valori NULL
Se uno qualsiasi degli argomenti è un NULL
value, MySQL salterà quel valore e il suo separatore, ma elaborerà comunque gli altri.
Esempio:
SELECT CONCAT_WS(', ','Auckland', NULL, 'New Zealand') AS Location;
Risultato:
+-----------------------+ | Location | +-----------------------+ | Auckland, New Zealand | +-----------------------+
Separatore di valore NULL
Se il separatore stesso è un NULL
valore, l'operazione di concatenazione restituirà NULL
.
Esempio:
SELECT CONCAT_WS(NULL,'Auckland', NULL, 'New Zealand') AS Location;
Risultato:
+----------+ | Location | +----------+ | NULL | +----------+
Questa è una delle differenze tra MySQL e T-SQL (SQL Server, Azure). In T-SQL, se il separatore è NULL
value, i valori della stringa sono ancora concatenati, ma senza un separatore.