+ (Zeichenfolgenverkettung) (Transact-SQL)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL Analytics-Endpunkt in Microsoft Fabric Warehouse in Microsoft Fabric

Ein Operator in einem Zeichenfolgenausdruck, der zwei oder mehr Zeichenfolgen, binäre Zeichenfolgen oder Spalten oder eine Kombination aus Zeichenfolgen und Spaltennamen zu einem Ausdruck verkettet (ein Zeichenfolgenoperator). SELECT 'book'+'case'; gibt beispielsweise bookcase zurück.

Transact-SQL-Syntaxkonventionen

Syntax

expression + expression

Argumente

expression

Ein beliebiger gültiger Ausdruck eines der Datentypen in der Kategorie "Zeichen" und "Binärdatentyp" mit Ausnahme der Datentypen "Bild", "ntext" oder "Text ". Beide Ausdrücke müssen denselben Datentyp haben, oder es muss möglich sein, einen Ausdruck implizit in den Datentyp des anderen Ausdrucks zu konvertieren.

Rückgabetypen

Gibt einen Wert vom Datentyp des Arguments zurück, das in der Rangfolge am höchsten steht. Weitere Informationen finden Sie unter "Rangfolge des Datentyps".

Hinweise

Wenn das Ergebnis der Verkettung von Zeichenfolgen den Grenzwert von 8.000 Byte übersteigt, wird das Ergebnis abgeschnitten. Wenn jedoch mindestens eine der verketteten Zeichenfolgen ein großer Werttyp ist, tritt keine Abkürzung auf.

Leere Zeichenfolgen und Zeichen

Der + Zeichenfolgenverkettungsoperator verhält sich anders, wenn er mit einer leeren, 0-längen Zeichenfolge arbeitet als bei der Verwendung mit NULLunbekannten Werten. Eine leere Zeichenfolge lässt sich als zwei einfache Anführungszeichen ohne Zeichen innerhalb der Anführungszeichen angeben. Eine binäre Zeichenfolge der Länge Null kann ohne 0x Bytewerte angegeben werden, die in der Hexadezimalkonstante angegeben sind. Beim Verketten einer leeren Zeichenfolge werden immer die beiden angegebenen Zeichenfolgen verkettet.

Verkettung von NULL-Werten

Wenn Sie mit Zeichenfolgen mit einem NULL Wert arbeiten, hängt das Ergebnis der Verkettung von den Sitzungseinstellungen ab. Wie bei arithmetischen Vorgängen, die für NULL Werte ausgeführt werden, sollte auch ein Ergebnis erzeugt NULL werden, wenn ein NULL Wert einem bekannten Wert hinzugefügt wird, normalerweise ein unbekannter Wert, ein Zeichenfolgenverkettungsvorgang, der mit einem NULL Wert ausgeführt wird.

Sie können dieses Verhalten jedoch ändern, indem Sie die CONCAT_NULL_YIELDS_NULL-Einstellung für die aktuelle Sitzung ändern. Weitere Informationen finden Sie unter SET CONCAT_NULL_YIELDS_NULL.

Verwendung von CAST und CONVERT bei Bedarf

Bei der Verkettung binärer Zeichenfolgen und Zeichen zwischen den binären Zeichenfolgen muss eine explizite Konvertierung in Zeichendaten erfolgen.

In den folgenden Beispielen wird gezeigt, wann bzw. wann CONVERTbzwCAST. wann oder , wann CONVERTCASToder , nicht verwendet werden muss.

In diesem Beispiel ist keine CONVERT funktion erforderlich CAST , da in diesem Beispiel zwei binäre Zeichenfolgen verkettet werden.

DECLARE @mybin1 VARBINARY(5), @mybin2 VARBINARY(5);

SET @mybin1 = 0xFF;
SET @mybin2 = 0xA5;
-- No CONVERT or CAST function is required because this example
-- concatenates two binary strings.
SELECT @mybin1 + @mybin2;

In diesem Beispiel ist eine oder CAST eine CONVERT Funktion erforderlich, da in diesem Beispiel zwei binäre Zeichenfolgen und ein Leerzeichen verkettet werden.

DECLARE @mybin1 VARBINARY(5), @mybin2 VARBINARY(5);

SET @mybin1 = 0xFF;
SET @mybin2 = 0xA5;

-- A CONVERT or CAST function is required because this example
-- concatenates two binary strings plus a space.
SELECT CONVERT(VARCHAR(5), @mybin1) + ' '
   + CONVERT(VARCHAR(5), @mybin2);
-- Here is the same conversion using CAST.
SELECT CAST(@mybin1 AS VARCHAR(5)) + ' '
   + CAST(@mybin2 AS VARCHAR(5));

Beispiele

Die Transact-SQL-Codebeispiele in diesem Artikel verwenden die AdventureWorks2022- oder AdventureWorksDW2022-Beispieldatenbank, die Sie von der Homepage Microsoft SQL Server Samples and Community Projects herunterladen können.

A. Verwenden von Zeichenfolgenverkettung

Im folgenden Beispiel wird eine einzelne Spalte unter der Spaltenüberschrift Name aus mehreren Zeichenspalten erstellt, wobei der Familienname der Person gefolgt von einem Komma, einem einzigen Leerzeichen und dann dem Vornamen der Person entspricht. Das Resultset befindet sich in aufsteigender, alphabetischer Reihenfolge nach dem Familiennamen und dann nach dem Vornamen.

SELECT (LastName + ', ' + FirstName) AS Name
FROM Person.Person
ORDER BY LastName ASC, FirstName ASC;

B. Kombinieren numerischer und Datumsdatentypen

Im folgenden Beispiel werden die Datentypen numeric und date mithilfe der CONVERT-Funktion verkettet.

SELECT 'The order is due on ' + CONVERT(VARCHAR(12), DueDate, 101)
FROM Sales.SalesOrderHeader
WHERE SalesOrderID = 50001;
GO

Hier sehen Sie das Ergebnis.

------------------------------------------------
The order is due on 04/23/2007

C. Verwenden mehrerer Zeichenfolgenverkettung

Im folgenden Beispiel werden mehrere Zeichenfolgen verkettet, um eine lange Zeichenfolge zu bilden, um den Familiennamen und die erste Initiale der Vizepräsidenten bei Adventure Works Cycles anzuzeigen. Nach dem Familiennamen und einem Punkt nach der ersten Initiale wird ein Komma hinzugefügt.

SELECT (LastName + ',' + SPACE(1) + SUBSTRING(FirstName, 1, 1) + '.') AS Name, e.JobTitle
FROM Person.Person AS p
    JOIN HumanResources.Employee AS e
    ON p.BusinessEntityID = e.BusinessEntityID
WHERE e.JobTitle LIKE 'Vice%'
ORDER BY LastName ASC;
GO

Hier sehen Sie das Ergebnis.

Name               Title
-------------      ---------------`
Duffy, T.          Vice President of Engineering
Hamilton, J.       Vice President of Production
Welcker, B.        Vice President of Sales

D: Verwenden großer Zeichenfolgen in Verkettung

Im folgenden Beispiel werden mehrere Zeichenfolgen zu einer langen Zeichenfolge verkettet. Anschließend wird versucht, die Länge der endgültigen Zeichenfolge zu berechnen. Die endgültige Länge des Resultsets ist 16.000, da die Ausdrucksauswertung von links beginnt, @x + @y@z + d. h. => (@x + @z) + . @y In diesem Fall wird das Ergebnis von (@x + @z) bei 8.000 Bytes abgeschnitten und dann @y dem Resultset hinzugefügt, wodurch die endgültige Zeichenfolgenlänge 16.000 beträgt. Da @y es sich um eine Zeichenfolge mit großem Werttyp handelt, tritt keine Abkürzung auf.

DECLARE @x VARCHAR(8000) = REPLICATE('x', 8000)
DECLARE @y VARCHAR(max) = REPLICATE('y', 8000)
DECLARE @z VARCHAR(8000) = REPLICATE('z',8000)
SET @y = @x + @z + @y
-- The result of following select is 16000
SELECT LEN(@y) AS y
GO

Hier sehen Sie das Ergebnis.

y
-------
16000

Beispiele: Azure Synapse Analytics und Analytics-Plattformsystem (PDW)

Die Transact-SQL-Codebeispiele in diesem Artikel verwenden die AdventureWorks2022- oder AdventureWorksDW2022-Beispieldatenbank, die Sie von der Homepage Microsoft SQL Server Samples and Community Projects herunterladen können.

E. Verwenden mehrerer Zeichenfolgenverkettung

Im folgenden Beispiel werden mehrere Zeichenfolgen verkettet, um eine lange Zeichenfolge zu bilden, um den Familiennamen und die erste Initiale der Vizepräsidenten in einer Beispieldatenbank anzuzeigen. Nach dem Familiennamen und einem Punkt nach der ersten Initiale wird ein Komma hinzugefügt.

SELECT (LastName + ', ' + SUBSTRING(FirstName, 1, 1) + '.') AS Name, Title
FROM DimEmployee
WHERE Title LIKE '%Vice Pres%'
ORDER BY LastName ASC;

Hier sehen Sie das Ergebnis.

Name               Title
-------------      ---------------
Duffy, T.          Vice President of Engineering
Hamilton, J.       Vice President of Production
Welcker, B.        Vice President of Sales