|| (Zeichenfolgenverkettung) (Transact-SQL)

Gilt für: Azure SQL-Datenbank

Der || Pipes-Operator in einem Zeichenfolgenausdruck verkettet zwei oder mehr Zeichen oder binäre Zeichenfolgen, Spalten oder eine Kombination aus Zeichenfolgen und Spaltennamen in einem Ausdruck (einem Zeichenfolgenoperator). SELECT 'SQL ' || 'Server'; gibt beispielsweise SQL Server 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 "xml", "json", "image", "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 || Operator (Zeichenfolgenverkettung) verhält sich anders, wenn er mit einer leeren Zeichenfolge der Länge Null funktioniert als bei verwendung mit NULLoder unbekannten 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

Wie bei arithmetischen Vorgängen, die für NULL Werte ausgeführt werden, ist das Ergebnis normalerweise ein NULL Wert, wenn ein NULL Wert einem bekannten Wert hinzugefügt wird. Ein Zeichenfolgenverkettungsvorgang, der mit einem NULL Wert ausgeführt wird, sollte auch ein NULL Ergebnis erzeugen.

Der || Operator berücksichtigt die SET CONCAT_NULL_YIELDS_NULL Option nicht und verhält sich immer so, als ob das ANSI SQL-Verhalten aktiviert ist, was zu einer der Eingaben NULLführtNULL. Dies ist der Hauptunterschied beim Verhalten zwischen den + Operatoren und || Verkettungsoperatoren. 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 (LastName) der Person gefolgt von einem Komma, einem einzelnen Leerzeichen und dann dem Vornamen (FirstName) 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 Zeichenfolgenverkettungen

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