Udostępnij za pośrednictwem


CONCAT_WS (Transact-SQL)

Dotyczy: SQL Server 2017 (14.x) i nowszych Azure SQL DatabaseAzure SQL Managed Instancepunkt końcowy analizy SQL usługi Azure Synapse AnalyticsSQL w usłudze Microsoft FabricWarehouse 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;