Condividi tramite


+ (concatenazione di stringhe) (Transact-SQL)

Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure endpoint di analisi SQL di Azure Synapse Analytics Platform System (PDW) in Microsoft Fabric Warehouse nel database SQL di Microsoft Fabric in Microsoft Fabric

Operatore in un'espressione stringa che consente di concatenare in un'unica espressione due o più stringhe di tipo carattere o binario, colonne o una combinazione di nomi di colonna e stringhe (operatore di stringa). Ad esempio SELECT 'book'+'case'; restituisce bookcase.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

expression + expression

Argomenti

expression

Qualsiasi espressione valida di uno dei tipi di dati nella categoria di tipi di dati carattere e binario, ad eccezione dei tipi di dati image, ntext o text. È necessario che alle due espressioni sia applicato lo stesso tipo di dati oppure che un'espressione possa essere convertita in modo implicito nel tipo di dati dell'altra espressione.

Tipi restituiti

Viene restituito il tipo di dati dell'argomento con precedenza maggiore. Per altre informazioni, vedere Precedenza del tipo di dati.

Osservazioni:

Se il risultato della concatenazione di stringhe supera il limite di 8.000 byte, il risultato viene troncato. Tuttavia, se almeno una delle stringhe concatenate è un tipo valore di grandi dimensioni, il troncamento non si verifica.

Stringhe e caratteri di lunghezza zero

L'operatore + di concatenazione di stringhe si comporta in modo diverso quando funziona con una stringa vuota di lunghezza zero rispetto a quando funziona con NULLo valori sconosciuti. Una stringa di caratteri di lunghezza zero può essere specificata con due virgolette singole senza alcun carattere all'interno delle virgolette. Una stringa binaria di lunghezza zero può essere specificata come 0x senza valori di byte specificati nella costante esadecimale. La concatenazione di una stringa di valore zero comporta sempre la concatenazione delle due stringhe specificate.

Concatenazione di valori NULL

Quando si utilizzano stringhe con un NULL valore, il risultato della concatenazione dipende dalle impostazioni della sessione. Come per le operazioni aritmetiche eseguite sui NULL valori, quando un NULL valore viene aggiunto a un valore noto, il risultato è in genere un valore sconosciuto, un'operazione di concatenazione di stringhe eseguita con un NULL valore deve produrre anche un NULL risultato.

È tuttavia possibile modificare questo comportamento cambiando l'impostazione di CONCAT_NULL_YIELDS_NULL per la sessione corrente. Per altre informazioni, vedere SET CONCAT_NULL_YIELDS_NULL.

Uso di CAST e CONVERT quando necessario

Per la concatenazione di stringhe binarie e dei caratteri tra le stringhe binarie, è necessario eseguire una conversione esplicita in dati di tipo carattere.

Gli esempi seguenti mostrano quando CONVERT, o CAST, deve essere usato con la concatenazione binaria e quando CONVERT, o CAST, non deve essere usato.

In questo esempio non è necessaria alcuna CONVERT funzione o CAST perché in questo esempio vengono concatenate due stringhe binarie.

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 questo esempio è necessaria una CONVERT funzione o CAST perché in questo esempio vengono concatenate due stringhe binarie più uno spazio.

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));

Esempi

Gli esempi di codice Transact-SQL in questo articolo utilizzano il database campione AdventureWorks2022 o AdventureWorksDW2022, che è possibile scaricare dalla home page di Esempi di Microsoft SQL Server e progetti collettivi.

R. Usare la concatenazione di stringhe

Nell'esempio seguente viene creata una singola colonna sotto l'intestazione Name di colonna da più colonne di caratteri, con il nome della famiglia della persona seguita da una virgola, da uno spazio singolo e quindi dal nome della persona. Il set di risultati è in ordine alfabetico crescente in base al nome della famiglia e quindi al nome.

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

B. Combinare tipi di dati numerici e data

Nell'esempio seguente viene usata la funzione CONVERT per concatenare i tipi di dati numeric e date.

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

Il set di risultati è il seguente.

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

C. Usare più concatenazioni di stringhe

Nell'esempio seguente vengono concatenate più stringhe per formare una stringa lunga per visualizzare il nome della famiglia e il primo iniziale dei vice presidenti di Adventure Works Cycles. Viene aggiunta una virgola dopo il nome della famiglia e un punto dopo la prima iniziale.

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

Il set di risultati è il seguente.

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

D. Usare stringhe di grandi dimensioni nella concatenazione

Nell'esempio seguente si concatenano più stringhe per formare una stringa lunga e quindi si prova a calcolare la lunghezza della stringa finale. La lunghezza finale del set di risultati è 16.000, perché la valutazione dell'espressione inizia da sinistra, ovvero> = + @x@z@y + (@x + @z) + . @y In questo caso, il risultato di (@x + @z) viene troncato a 8.000 byte e quindi @y viene aggiunto al set di risultati, che rende la lunghezza finale della stringa 16.000. Poiché @y è una stringa di tipo valore di grandi dimensioni, il troncamento non si verifica.

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

Il set di risultati è il seguente.

y
-------
16000

Esempi: Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)

Gli esempi di codice Transact-SQL in questo articolo utilizzano il database campione AdventureWorks2022 o AdventureWorksDW2022, che è possibile scaricare dalla home page di Esempi di Microsoft SQL Server e progetti collettivi.

E. Usare più concatenazioni di stringhe

Nell'esempio seguente vengono concatenate più stringhe per formare una stringa lunga per visualizzare il nome della famiglia e il primo iniziale dei vice presidenti all'interno di un database di esempio. Viene aggiunta una virgola dopo il nome della famiglia e un punto dopo la prima iniziale.

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

Il set di risultati è il seguente.

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