|| (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 NULL
oder 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 NULL
fü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 CONVERT
bzwCAST
. wann oder , wann CONVERT
CAST
oder , 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
Zugehöriger Inhalt
- ||= (Verbundzuordnung) (Transact-SQL)
- + (Zeichenfolgenverkettung) (Transact-SQL)
- += (Zeichenfolgenverkettungszuweisung) (Transact-SQL)
- ALTER DATABASE (Transact-SQL)
- CAST und CONVERT (Transact-SQL)
- Datentypkonvertierung (Datenbank-Engine)
- Data types (Transact-SQL) (Datentypen (Transact-SQL))
- Ausdrücke (Transact-SQL)
- Integrierte Funktionen (Transact-SQL)
- Operatoren (Transact-SQL)
- SELECT (Transact-SQL)
- SET-Anweisungen (Transact-SQL)