CONCAT_WS (Transact-SQL)

Gilt für: SQL Server 2017 (14.x) und höherAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsSQL Analytics-Endpunkt in Microsoft FabricWarehouse in Microsoft Fabric

Diese Funktion gibt eine Zeichenfolge zurück, die das Ergebnis einer End-to-End-Verkettung oder -Verknüpfung von mindestens zwei Zeichenfolgenwerten darstellt. Sie trennt diese verketteten Zeichenfolgenwerte mit dem im ersten Funktionsargument angegebenen Trennzeichen. (CONCAT_WS gibt die Anweisung concatenate with separator (mit Trennzeichen verketten) an.)

Syntax

CONCAT_WS ( separator , argument1 , argument2 [ , argumentN ] ... )

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) oder früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

Trennzeichen

Ein Ausdruck eines beliebigen Zeichentyps (char, nchar, nvarchar oder varchar).

argument1, argument2 [ , argumentN ]

Ein Ausdruck eines beliebigen Zeichenfolgenwerts. Die CONCAT_WS-Funktion erfordert mindestens zwei Argumente und lässt nicht mehr als 254 Argumente zu.

Rückgabetypen

Ein Zeichenfolgenwert, dessen Länge und Typ von der Eingabe abhängig sind.

Bemerkungen

CONCAT_WS lässt eine variable Anzahl von Zeichenfolgenargumenten zu und verkettet (oder verknüpft) sie in einer einzelnen Zeichenfolge. Sie trennt diese verketteten Zeichenfolgenwerte mit dem im ersten Funktionsargument angegebenen Trennzeichen. CONCAT_WS erfordert ein Trennzeichen und mindestens zwei weitere Zeichenfolgenwerte als Argumente, andernfalls gibt CONCAT_WS einen Fehler aus. Alle Argumente werden von CONCAT_WS vor der Verkettung implizit in Zeichenfolgentypen konvertiert.

Die implizite Konvertierung in Zeichenfolgen erfolgt basierend auf den vorhandenen Regeln für Datentypkonvertierungen. Weitere Informationen zu Verhaltens- und Datentypkonvertierungen finden Sie unter CONCAT (Transact-SQL).

Behandeln von NULL-Werten

CONCAT_WS ignoriert die SET CONCAT_NULL_YIELDS_NULL { ON | OFF }-Einstellung.

Wenn CONCAT_WS Argumente nur mit NULL-Werten empfängt, wird eine leere Zeichenfolge vom Typ varchar(1) zurückgegeben.

CONCAT_WS ignoriert NULL-Werte bei der Verkettung und fügt keine Trennzeichen zwischen NULL-Werten hinzu. Daher kann CONCAT_WS die Verkettung von Zeichenfolgen, in denen möglicherweise „leere“ Werte auftreten, wie etwa ein zweites Adressfeld, sauber verarbeiten. Weitere Informationen finden Sie unter Beispiel B.

Wenn ein Szenario durch ein Trennzeichen getrennte NULL-Werte beinhaltet, ziehen Sie die ISNULL-Funktion in Erwägung. Weitere Informationen finden Sie unter Beispiel C.

Beispiele

A. Verketten von Werten mit einem Trennzeichen

Dieses Beispiel verkettet drei Spalten der sys.databases-Tabelle, wobei die Werte durch den Bindestrich mit Leerzeichen (-) drum herum voneinander getrennt werden.

SELECT CONCAT_WS(' - ', database_id, recovery_model_desc, containment_desc) AS DatabaseInfo
FROM sys.databases;

Hier ist das Resultset.

DatabaseInfo
-----------------
1 - SIMPLE - NONE
2 - SIMPLE - NONE
3 - FULL - NONE
4 - SIMPLE - NONE

B. Überspringen von NULL-Werten

In diesem Beispiel werden NULL-Werte in der Argumentliste ignoriert und ein Kommatrennwert (,) verwendet.

SELECT CONCAT_WS(',', '1 Microsoft Way', NULL, NULL, 'Redmond', 'WA', 98052) AS Address;

Hier ist das Resultset.

Address
--------------------------------
1 Microsoft Way,Redmond,WA,98052

C. Generieren von CSV-formatierten Daten aus einer Tabelle

Dieses Beispiel verwendet einen Kommatrennwert (,) und fügt ein Wagenrücklaufzeichen CHAR(13) hinzu, sodass ein durch Kommas getrenntes Werteformat im Resultset entsteht.

SELECT STRING_AGG(CONCAT_WS(',', database_id, recovery_model_desc, containment_desc), CHAR(13)) AS DatabaseInfo
FROM sys.databases;

Hier ist das Resultset.

DatabaseInfo
-------------
1,SIMPLE,NONE
2,SIMPLE,NONE
3,FULL,NONE
4,SIMPLE,NONE

CONCAT_WS ignoriert NULL-Werte in den Spalten. Umschließen Sie eine Spalte, die NULL-Werte zulässt, mit der ISNULL-Funktion, und geben Sie einen Standardwert an. Beispiel:

SELECT STRING_AGG(
    CONCAT_WS(',', database_id, ISNULL(recovery_model_desc, ''),
    ISNULL(containment_desc, 'N/A')
    ), CHAR(13)) AS DatabaseInfo
FROM sys.databases;