|| (Tekenreekssamenvoeging) (Transact-SQL)
van toepassing op:Azure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric
De operator ||
pipes in een tekenreeksexpressie voegt twee of meer tekens of binaire tekenreeksen, kolommen of een combinatie van tekenreeksen en kolomnamen samen in één expressie (een tekenreeksoperator).
SELECT 'SQL ' || 'Server';
retourneert bijvoorbeeld SQL Server
. De ||
-operator volgt de ANSI SQL-standaard voor het samenvoegen van tekenreeksen. In SQL Server kunt u ook tekenreekssamenvoeging uitvoeren met behulp van +
operator en de CONCAT()
-functie.
Transact-SQL syntaxisconventies
Syntaxis
expression || expression
Argumenten
expressie
Elke geldige expressie van een van de gegevenstypen in de categorie teken en binair gegevenstype, met uitzondering van de xml-, json-, afbeelding, ntextof tekst gegevenstypen. Beide expressies moeten van hetzelfde gegevenstype zijn of één expressie moet impliciet kunnen worden geconverteerd naar het gegevenstype van de andere expressie.
Retourtypen
Retourneert het gegevenstype van het argument met de hoogste prioriteit. Zie Prioriteit van gegevenstypevoor meer informatie.
Opmerkingen
Enkele voordelen van het gebruik van de ansi-tekenreekssamenvoegingsyntaxis zijn:
Draagbaarheid: Het gebruik van de ANSI-standaardoperator
||
voor tekenreekssamenvoeging zorgt ervoor dat uw SQL-code overdraagbaar is in verschillende databasesystemen. Dit betekent dat u dezelfde SQL-query's kunt uitvoeren op verschillende databaseplatforms zonder dat u hoeft te wijzigen.Consistentie: naleving van de ANSI-standaard bevordert consistentie in uw SQL-code, waardoor het gemakkelijker te lezen en te onderhouden is, met name bij het werken in omgevingen met meerdere databasesystemen.
Interoperabiliteit: de ANSI-standaard wordt algemeen herkend en ondersteund door de meeste SQL-compatibele databasesystemen, waardoor de interoperabiliteit tussen verschillende systemen en hulpprogramma's wordt verbeterd.
Gedrag van afkapping van tekenreeksen
Als het resultaat van de samenvoeging van tekenreeksen de limiet van 8000 bytes overschrijdt, wordt het resultaat afgekapt. Als echter ten minste één van de tekenreeksen die zijn samengevoegd een groot waardetype is, wordt afkapping niet uitgevoerd.
Tekenreeksen en tekens met lengte nul
De operator ||
(tekenreekssamenvoeging) gedraagt zich anders wanneer deze werkt met een lege tekenreeks met de lengte nul dan wanneer deze werkt met NULL
of onbekende waarden. Een tekenreeks met lengte nul kan worden opgegeven als twee enkele aanhalingstekens zonder tekens binnen de aanhalingstekens. Een binaire tekenreeks met de lengte nul kan worden opgegeven als 0x
zonder bytewaarden die zijn opgegeven in de hexadecimale constante. Als u een tekenreeks met lengte nul samenvoegt, worden altijd de twee opgegeven tekenreeksen samengevoegd.
Samenvoeging van NULL-waarden
Net als bij rekenkundige bewerkingen die worden uitgevoerd op NULL
waarden, is het resultaat meestal een NULL
waarde wanneer een NULL
waarde wordt toegevoegd aan een bekende waarde. Een tekenreekssamenvoegingsbewerking die wordt uitgevoerd met een NULL
-waarde, moet ook een NULL
resultaat opleveren.
De ||
-operator houdt niet aan de SET CONCAT_NULL_YIELDS_NULL
optie en gedraagt zich altijd alsof het ANSI SQL-gedrag is ingeschakeld, wat NULL
oplevert als een van de invoergegevens is NULL
. Dit is het belangrijkste verschil in gedrag tussen de operatoren voor +
en ||
samenvoeging. Zie SET CONCAT_NULL_YIELDS_NULLvoor meer informatie.
Gebruik van CAST en CONVERT indien nodig
Er moet een expliciete conversie naar tekengegevens worden gebruikt bij het samenvoegen van binaire tekenreeksen en eventuele tekens tussen de binaire tekenreeksen.
In de volgende voorbeelden ziet u wanneer CONVERT
, of CAST
, moet worden gebruikt met binaire samenvoeging en wanneer CONVERT
, of CAST
, niet hoeft te worden gebruikt.
In dit voorbeeld is er geen CONVERT
of CAST
functie vereist, omdat in dit voorbeeld twee binaire tekenreeksen worden samengevoegd.
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 dit voorbeeld is een CONVERT
- of CAST
-functie vereist omdat in dit voorbeeld twee binaire tekenreeksen plus een spatie worden samengevoegd.
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));
Voorbeelden
De Transact-SQL codevoorbeelden in dit artikel gebruiken de AdventureWorks2022
of AdventureWorksDW2022
voorbeelddatabase, die u kunt downloaden van de Microsoft SQL Server-voorbeelden en communityprojecten startpagina.
Een. Tekenreekssamenvoeging gebruiken
In het volgende voorbeeld wordt één kolom gemaakt onder de kolomkop Name
uit meerdere tekenkolommen, met de familienaam (LastName
) van de persoon gevolgd door een komma, één spatie en vervolgens de voornaam (FirstName
) van de persoon. De resultatenset bevindt zich in oplopende, alfabetische volgorde op de familienaam en vervolgens op de voornaam.
SELECT (LastName || ', ' || FirstName) AS Name
FROM Person.Person
ORDER BY LastName ASC, FirstName ASC;
B. Numerieke en datumgegevenstypen combineren
In het volgende voorbeeld wordt de functie CONVERT
gebruikt voor het samenvoegen van numerieke en datum gegevenstypen.
SELECT 'The order is due on ' || CONVERT(VARCHAR(12), DueDate, 101)
FROM Sales.SalesOrderHeader
WHERE SalesOrderID = 50001;
GO
Dit is de resultatenset.
------------------------------------------------
The order is due on 04/23/2007
C. Meerdere tekenreekssamenvoegingen gebruiken
In het volgende voorbeeld worden meerdere tekenreeksen samengevoegd om één lange tekenreeks te vormen om de familienaam en het eerste begin van de vicepresidenten bij Adventure Works Cycles weer te geven. Er wordt een komma toegevoegd na de familienaam en een punt na het eerste begin.
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
Dit is de resultatenset.
Name Title
------------- ---------------`
Duffy, T. Vice President of Engineering
Hamilton, J. Vice President of Production
Welcker, B. Vice President of Sales
D. Grote tekenreeksen gebruiken in samenvoeging
Het volgende voorbeeld voegt meerdere tekenreeksen samen om één lange tekenreeks te vormen en probeert vervolgens de lengte van de uiteindelijke tekenreeks te berekenen. De uiteindelijke lengte van de resultatenset is 16.000, omdat de expressie-evaluatie begint vanaf links, @x
+ @z
+ @y
=> (@x + @z
) + @y
. In dit geval wordt het resultaat van (@x
+ @z
) afgekapt bij 8.000 bytes en wordt @y
toegevoegd aan de resultatenset, waardoor de uiteindelijke tekenreekslengte 16.000 wordt. Omdat @y
een tekenreeks voor een groot waardetype is, vindt afkapping niet plaats.
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
Dit is de resultatenset.
y
-------
16000
Verwante inhoud
- ||= (Samengestelde toewijzing) (Transact-SQL)
- + (tekenreekssamenvoeging) (Transact-SQL)
- TEKST.SAMENV (Transact-SQL)
- += (Toewijzing tekenreekssamenvoeging) (Transact-SQL)
- ALTER DATABASE (Transact-SQL)
- CAST en CONVERTEREN (Transact-SQL)
- gegevenstypeconversie (Database Engine)
- gegevenstypen (Transact-SQL)
- expressies (Transact-SQL)
- Wat zijn de SQL-databasefuncties?
- operators (Transact-SQL)
-
SELECT (Transact-SQL) - SET-instructies (Transact-SQL)