W SQL Server i Azure, jeśli chcesz połączyć dwa lub więcej ciągów, możesz użyć CONCAT()
języka T-SQL funkcjonować. Podobnie jak w przypadku każdej podstawowej operacji konkatenacji, ta funkcja łączy ciągi razem, od końca do końca.
Ale co, jeśli musisz dodać separator między każdym ciągiem?
Na przykład możesz chcieć utworzyć listę ciągów oddzielonych przecinkami. W takim przypadku chciałbyś wstawić przecinek między każdym ciągiem. Tak:
Paris, France
Zamiast tego:
ParisFrance
Na szczęście T-SQL udostępnia funkcję CONCAT_WS()
funkcja, która pomoże ci to zrobić. CONCAT_WS()
funkcja działa tak samo jak CONCAT()
funkcji, z wyjątkiem tego, że wymaga dodatkowego argumentu – separatora, którego chcesz użyć.
Oto przykład:
SELECT CONCAT_WS(',','Paris', 'France') AS Location;
Wynik:
Location ------------ Paris,France
Możesz tam dodać spację, jeśli chcesz:
SELECT CONCAT_WS(', ','Paris', 'France') AS Location;
Wynik:
Location ------------- Paris, France
Separator
Nie ma nic do powiedzenia, że separatorem musi być przecinek. Separatorem może być wyrażenie dowolnego typu znaku (char
, nchar
, nvarchar
lub varchar
).
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 = 'THA';
Wynik:
Location --------------------------- Bangkok, Thailand Nonthaburi, Thailand Nakhon Ratchasima, Thailand Chiang Mai, Thailand Udon Thani, Thailand Hat Yai, Thailand Khon Kaen, Thailand Pak Kret, Thailand Nakhon Sawan, Thailand Ubon Ratchathani, Thailand Songkhla, Thailand Nakhon Pathom, Thailand
Wartości NULL
Jeśli którykolwiek z argumentów ma wartość NULL
wartość, SQL Server pominie tę wartość i jej separator, ale nadal będzie przetwarzać pozostałe.
Przykład:
SELECT CONCAT_WS(', ','Paris', NULL, 'France') AS Location;
Wynik:
Location ------------- Paris, France
Separator wartości NULL
Jeśli sam separator to NULL
wartość, operacja konkatenacji będzie nadal wykonywana, ale bez separatora.
Przykład:
SELECT CONCAT_WS(NULL,'Paris', NULL, 'France') AS Location;
Wynik:
Location ----------- ParisFrance
Jest to jedna z różnic między T-SQL i MySQL (MySQL ma również funkcję CONCAT_WS()
funkcjonować). W MySQL, jeśli separatorem jest NULL
wartość, konkatenacja daje w wyniku NULL
wartość.