W MySQL funkcja CONCAT_WS()
funkcja umożliwia dodanie separatora do połączonych ciągów. Jeśli po prostu użyjesz CONCAT()
funkcji, nie miałbyś separatora (chyba że jawnie dodałeś separator jako argument między każdym argumentem ciągu).
Powszechne użycie CONCAT_WS()
funkcja polega na utworzeniu listy rozdzielanej przecinkami.
Oto przykład:
SELECT CONCAT_WS(',','Sydney', 'Australia') AS Location;
Wynik:
+------------------+ | Location | +------------------+ | Sydney,Australia | +------------------+
Możesz tam dodać spację, jeśli chcesz:
SELECT CONCAT_WS(', ','Sydney', 'Australia') AS Location;
Wynik:
+-------------------+ | Location | +-------------------+ | Sydney, Australia | +-------------------+
Separator
Nie ma nic do powiedzenia, że separatorem musi być przecinek. Separatorem może być dowolny ciąg.
Oto ten sam przykład, co poprzedni, z wyjątkiem tego, że używa innego separatora.
SELECT CONCAT_WS(' - ','Paris', 'France') AS Location;
Wynik:
+----------------+ | Location | +----------------+ | Paris - France | +----------------+
Przykład bazy danych
Oto przykład pobierania danych z bazy danych i łączenia dwóch kolumn w jedną oddzieloną przecinkiem:
SELECT CONCAT_WS(', ', city.Name, country.Name ) AS Location FROM city INNER JOIN country ON city.CountryCode = country.Code WHERE country.Code = 'NZL';
Wynik:
+---------------------------+ | 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 | +---------------------------+
Wartości NULL
Jeśli którykolwiek z argumentów ma wartość NULL
wartość, MySQL pominie tę wartość i jej separator, ale nadal będzie przetwarzać pozostałe.
Przykład:
SELECT CONCAT_WS(', ','Auckland', NULL, 'New Zealand') AS Location;
Wynik:
+-----------------------+ | Location | +-----------------------+ | Auckland, New Zealand | +-----------------------+
Separator wartości NULL
Jeśli sam separator to NULL
wartość, operacja konkatenacji zwróci NULL
.
Przykład:
SELECT CONCAT_WS(NULL,'Auckland', NULL, 'New Zealand') AS Location;
Wynik:
+----------+ | Location | +----------+ | NULL | +----------+
To jedna z różnic między MySQL a T-SQL (SQL Server, Azure). W T-SQL, jeśli separatorem jest NULL
wartości, wartości ciągu są nadal połączone, ale bez separatora.