CONCAT_WS (Transact-SQL)
Gilt für: SQL Server 2017 (14.x) und höher Azure SQL-Datenbank Azure SQL verwaltete Instanz Azure Synapse Analytics SQL Analytics-Endpunkt in Microsoft Fabric Warehouse in Microsoft Fabric Warehouse 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 ] ... )
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 sehen Sie das Ergebnis.
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 sehen Sie das Ergebnis.
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 sehen Sie das Ergebnis.
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. Zum Beispiel:
SELECT STRING_AGG(
CONCAT_WS(',', database_id, ISNULL(recovery_model_desc, ''),
ISNULL(containment_desc, 'N/A')
), CHAR(13)) AS DatabaseInfo
FROM sys.databases;