CONCAT_WS (Transact-SQL)
Dotyczy: SQL Server 2017 (14.x) i nowszych
Azure SQL Database
Azure SQL Managed Instance
punkt końcowy analizy SQL usługi Azure Synapse Analytics
SQL w usłudze Microsoft Fabric
Warehouse w usłudze Microsoft Fabric
Ta funkcja zwraca ciąg wynikowy z łączenia lub łączenia dwóch lub większej liczby wartości ciągu w sposób end-to-end. Oddziela te wartości połączonych ciągów za pomocą ogranicznika określonego w pierwszym argumencie funkcji. (CONCAT_WS
wskazuje, połączyć z separatorem.)
Składnia
CONCAT_WS ( separator , argument1 , argument2 [ , argumentN ] ... )
Argumenty
separatora
Wyrażenie dowolnego typu znaku (char, nchar, nvarcharlub varchar).
argument1, argument2 [ , argumentN ]
Wyrażenie dowolnej wartości ciągu. Funkcja CONCAT_WS
wymaga co najmniej dwóch argumentów i nie więcej niż 254 argumentów.
Typy zwracane
Wartość ciągu, której długość i typ zależą od danych wejściowych.
Uwagi
CONCAT_WS
przyjmuje zmienną liczbę argumentów ciągów i łączy je (lub sprzężenia) w jeden ciąg. Oddziela te wartości połączonych ciągów za pomocą ogranicznika określonego w pierwszym argumencie funkcji.
CONCAT_WS
wymaga argumentu separatora i co najmniej dwóch innych argumentów wartości ciągu; w przeciwnym razie CONCAT_WS
zgłasza błąd.
CONCAT_WS
niejawnie konwertuje wszystkie argumenty na typy ciągów przed łączeniem.
Niejawna konwersja na ciągi jest zgodna z istniejącymi regułami konwersji typów danych. Aby uzyskać więcej informacji na temat zachowania i konwersji typów danych, zobacz CONCAT (Transact-SQL).
Traktowanie wartości NULL
CONCAT_WS
ignoruje ustawienie SET CONCAT_NULL_YIELDS_NULL { ON | OFF }
.
Jeśli CONCAT_WS
odbiera argumenty ze wszystkimi wartościami NULL
, zwraca pusty ciąg typu varchar(1).
CONCAT_WS
ignoruje wartości null podczas łączenia i nie dodaje separatora między wartościami null. W związku z tym CONCAT_WS
może czysta obsługa łączenia ciągów, które mogą mieć wartości "puste" — na przykład drugie pole adresu. Aby uzyskać więcej informacji, zobacz Przykład B.
Jeśli scenariusz obejmuje wartości null oddzielone ogranicznikiem, rozważ funkcję ISNULL. Aby uzyskać więcej informacji, zobacz Przykład C.
Przykłady
A. Łączenie wartości z separatorem
W tym przykładzie łączy trzy kolumny z tabeli sys.databases
, oddzielając wartości łącznikiem otoczonym spacjami (-
).
SELECT CONCAT_WS(' - ', database_id, recovery_model_desc, containment_desc) AS DatabaseInfo
FROM sys.databases;
Oto zestaw wyników.
DatabaseInfo
-----------------
1 - SIMPLE - NONE
2 - SIMPLE - NONE
3 - FULL - NONE
4 - SIMPLE - NONE
B. Pomiń wartości NULL
W tym przykładzie ignoruje NULL
wartości na liście argumentów i używa wartości separatora przecinka (,
).
SELECT CONCAT_WS(',', '1 Microsoft Way', NULL, NULL, 'Redmond', 'WA', 98052) AS Address;
Oto zestaw wyników.
Address
--------------------------------
1 Microsoft Way,Redmond,WA,98052
C. Generowanie danych sformatowanych w formacie CSV na podstawie tabeli
W tym przykładzie użyto wartości separatora przecinka (,
) i dodano znak powrotu karetki CHAR(13)
w formacie wartości rozdzielanych przecinkami zestawu wyników.
SELECT STRING_AGG(
CONCAT_WS(',', database_id, recovery_model_desc, containment_desc), CHAR(13)
) AS DatabaseInfo
FROM sys.databases;
Oto zestaw wyników.
DatabaseInfo
-------------
1,SIMPLE,NONE
2,SIMPLE,NONE
3,FULL,NONE
4,SIMPLE,NONE
CONCAT_WS
ignoruje wartości NULL
w kolumnach. Zawijaj kolumnę dopuszczaną do wartości null za pomocą funkcji ISNULL
i podaj wartość domyślną. Na przykład:
SELECT STRING_AGG(
CONCAT_WS(',', database_id, ISNULL(recovery_model_desc, ''), ISNULL(containment_desc, 'N/A')), CHAR(13)
) AS DatabaseInfo
FROM sys.databases;