+ (Concatenação de cadeias de caracteres) (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)Ponto de extremidade de SQL no Microsoft FabricWarehouse no Microsoft Fabric

Um operador em uma expressão de cadeia de caracteres que concatena duas ou mais cadeias de caracteres ou cadeias de caracteres binárias, colunas ou uma combinação de cadeias de caracteres e nomes de colunas em uma expressão (um operador de cadeia de caracteres). Por exemplo, SELECT 'book'+'case'; retorna bookcase.

Convenções de sintaxe de Transact-SQL

Sintaxe

expression + expression  

Observação

Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.

Argumentos

expressão
É qualquer expression válida de um dos tipos de dados na categoria de tipo de dados de caractere e binários, exceto os tipos de dados image, ntext ou text. As duas expressões devem ser do mesmo tipo de dados ou uma expressão deve poder ser convertida implicitamente no tipo de dados da outra expressão.

Uma conversão explícita em dados de caractere deve ser usada ao concatenar cadeias binárias e quaisquer caracteres entre as cadeias binárias. O exemplo a seguir mostra quando CONVERT ou CAST deve ser usado com a concatenação binária e quando CONVERT ou CAST não precisa ser usado.

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

Tipos de resultado

Retorna o tipo de dados do argumento com a precedência mais alta. Para obter mais informações, confira Precedência de tipo de dados (Transact-SQL).

Comentários

O operador + (Concatenação de cadeias de caracteres) se comporta de maneira diferente ao trabalhar com uma cadeia de caracteres vazia de comprimento zero do que ao trabalhar com valores NULL ou desconhecidos. Uma cadeia de caracteres de comprimento zero pode ser especificada como duas aspas simples sem nenhum caractere dentro das aspas. Uma cadeia de caracteres binária de comprimento zero pode ser especificada como 0x sem nenhum valor de byte especificado na constante hexadecimal. A concatenação de uma cadeia de caracteres de comprimento zero sempre concatena as duas cadeias de caracteres especificadas. Quando você trabalhar com cadeias de caracteres com um valor nulo, o resultado da concatenação dependerá das configurações da sessão. Assim como as operações aritméticas que são executadas em valores nulos, quando um valor nulo é adicionado a um valor conhecido, o resultado normalmente será um valor desconhecido, uma operação de concatenação de cadeias de caracteres executada com um valor nulo também deve produzir um resultado nulo. Entretanto, você pode alterar esse comportamento alterando a configuração de CONCAT_NULL_YIELDS_NULL na sessão atual. Para obter mais informações, confira SET CONCAT_NULL_YIELDS_NULL (Transact-SQL).

Se o resultado da concatenação de cadeias de caracteres exceder o limite de 8.000 bytes, o resultado será truncado. Entretanto, se pelo menos uma das cadeias de caracteres concatenadas for um tipo de valor grande, não ocorrerá truncamento.

Exemplos

a. Usando a concatenação de cadeias de caracteres

O exemplo a seguir cria uma única coluna sob o título de coluna Name a partir de colunas de vários caracteres, com o sobrenome da pessoa seguido por uma vírgula, um único espaço e o nome da pessoa. O conjunto de resultados está em ordem alfabética crescente pelo sobrenome e depois pelo nome.

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

B. Combinando tipos de dados numéricos e de data

O exemplo a seguir usa a função CONVERT para concatenar os tipos de dados numeric e date.

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

Este é o conjunto de resultados.

------------------------------------------------  
The order is due on 04/23/2007  
(1 row(s) affected)

C. Usando concatenação de várias cadeias de caracteres

O exemplo a seguir concatena várias cadeias de caracteres para formar uma cadeia de caracteres longa a fim de exibir o sobrenome e a primeira inicial dos vice-presidentes na Ciclos da Adventure Works. Uma vírgula é adicionada depois do sobrenome e um ponto depois da primeira inicial.

-- Uses AdventureWorks  
  
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  

Este é o conjunto de resultados.

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

(3 row(s) affected)

D. Usando cadeias de caracteres grandes em concatenação

O exemplo a seguir concatena várias cadeias de caracteres para formar uma cadeia de caracteres longa e, em seguida, tenta calcular o tamanho da cadeia de caracteres final. O tamanho final do conjunto de resultados é 16000, porque a avaliação da expressão começa na esquerda, ou seja, @x + @z + @y => (@x + @z) + @y. Nesse caso, o resultado de @x + @z) é truncado em 8000 bytes e, em seguida, @y é adicionado ao conjunto de resultados, o que faz o tamanho da cadeia de caracteres final chegar a 16000. Como @y é uma cadeia de caracteres de tipo de valor grande, não ocorre o truncamento.

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

Este é o conjunto de resultados.

y        
-------  
16000  
 
(1 row(s) affected)

Exemplos: Azure Synapse Analytics e PDW (Analytics Platform System)

E. Usando concatenação de várias cadeias de caracteres

O exemplo a seguir concatena várias cadeias de caracteres para formar uma cadeia de caracteres longa, a fim de exibir o sobrenome e a primeira inicial dos vice-presidentes em um banco de dados de exemplo. Uma vírgula é adicionada depois do sobrenome e um ponto depois da primeira inicial.

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

Este é o conjunto de resultados.

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

Consulte Também

+= (Atribuição de concatenação de cadeia de caracteres) (Transact-SQL)
ALTER DATABASE (Transact-SQL)
CAST e CONVERT (Transact-SQL)
Conversão de tipo de dados (Mecanismo de Banco de Dados)
Tipos de dados (Transact-SQL)
Expressões (Transact-SQL)
Funções internas (Transact-SQL)
Operadores (Transact-SQL)
SELECT (Transact-SQL)
Instruções SET (Transact-SQL)