Delen via


+ (tekenreekssamenvoeging) (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricMagazijn in Microsoft FabricSQL-database in Microsoft Fabric Preview

Een operator in een tekenreeksexpressie die twee of meer teken- of binaire tekenreeksen, kolommen of een combinatie van tekenreeksen en kolomnamen samenvoegt in één expressie (een tekenreeksoperator). Retourneert bookcasebijvoorbeeld SELECT 'book'+'case'; .

Transact-SQL syntaxis-conventies

Syntax

expression + expression

Arguments

expression

Elke geldige expressie van een van de gegevenstypen in de categorie teken en binair gegevenstype, met uitzondering van de afbeelding, ntekst of tekstgegevenstypen . Beide expressies moeten van hetzelfde gegevenstype zijn of één expressie moet impliciet kunnen worden geconverteerd naar het gegevenstype van de andere expressie.

Return types

Retourneert het gegevenstype van het argument met de hoogste prioriteit. Zie Prioriteit van gegevenstypevoor meer informatie.

Remarks

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 + samenvoegingsoperator voor tekenreeksen gedraagt zich anders wanneer deze werkt met een lege tekenreeks met lengte nul dan wanneer deze werkt met NULLof 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

Wanneer u met tekenreeksen met een NULL waarde werkt, is het resultaat van de samenvoeging afhankelijk van de sessie-instellingen. Net als bij rekenkundige bewerkingen die worden uitgevoerd op NULL waarden, moet het resultaat, wanneer een NULL waarde wordt toegevoegd aan een bekende waarde, meestal een onbekende waarde zijn, een tekenreekssamenvoegingsbewerking die met een NULL waarde wordt uitgevoerd, ook een NULL resultaat opleveren.

U kunt dit gedrag echter wijzigen door de instelling voor CONCAT_NULL_YIELDS_NULL de huidige sessie te wijzigen. 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));

Examples

De codevoorbeelden in dit artikel gebruiken de AdventureWorks2022 of AdventureWorksDW2022 voorbeelddatabase die u kunt downloaden van de startpagina van Microsoft SQL Server Samples en Community Projects .

A. Tekenreekssamenvoeging gebruiken

In het volgende voorbeeld wordt één kolom gemaakt onder de kolomkop Name van meerdere tekenkolommen, met de familienaam van de persoon gevolgd door een komma, één spatie en vervolgens de voornaam 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

Hier is het resultatenoverzicht.

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

C. Meerdere tekenreekssamenvoeging 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

Hier is het resultatenoverzicht.

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

Hier is het resultatenoverzicht.

y
-------
16000

Voorbeelden: Azure Synapse Analytics and Analytics Platform System (PDW)

De codevoorbeelden in dit artikel gebruiken de AdventureWorks2022 of AdventureWorksDW2022 voorbeelddatabase die u kunt downloaden van de startpagina van Microsoft SQL Server Samples en Community Projects .

E. Meerdere tekenreekssamenvoeging gebruiken

In het volgende voorbeeld worden meerdere tekenreeksen samengevoegd om één lange tekenreeks te vormen om de familienaam en het eerste begin van de vice-presidenten in een voorbeelddatabase weer te geven. Er wordt een komma toegevoegd na de familienaam en een punt na het eerste begin.

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

Hier is het resultatenoverzicht.

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