+ (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)
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de