+ (Concatenação de cadeia de caracteres) (Transact-SQL)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics PDW (Analytics Platform System) Ponto de extremidade de análise do SQL Warehouse 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
Argumentos
expressão
Qualquer expressão válida de qualquer um dos tipos de dados na categoria de tipo de dados binário e de caracteres, 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.
Tipos de retorno
Retorna o tipo de dados do argumento com a precedência mais alta. Para obter mais informações, consulte Precedência de tipo de dados.
Comentários
Se o resultado da concatenação de cadeias de caracteres exceder o limite de 8.000 bytes, o resultado será truncado. No entanto, se pelo menos uma das cadeias de caracteres concatenadas for um tipo de valor grande, o truncamento não ocorrerá.
Cadeias de caracteres e caracteres de comprimento zero
O +
operador de concatenação de cadeia de caracteres se comporta de maneira diferente quando trabalha com uma cadeia de caracteres vazia de comprimento zero do que quando trabalha com NULL
valores desconhecidos 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.
Concatenação de valores NULL
Quando você trabalha com strings com um NULL
valor, o resultado da concatenação depende das configurações da sessão. Assim como acontece com as operações aritméticas executadas em NULL
valores, quando um NULL
valor é adicionado a um valor conhecido, o resultado normalmente é um valor desconhecido, uma operação de concatenação de cadeia de caracteres executada com um NULL
valor também deve produzir um NULL
resultado.
Entretanto, você pode alterar esse comportamento alterando a configuração de CONCAT_NULL_YIELDS_NULL
na sessão atual. Para saber mais, confira SET CONCAT_NULL_YIELDS_NULL.
Uso de CAST e CONVERT quando necessário
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.
Os exemplos a seguir mostram quando CONVERT
, ou CAST
, deve ser usado com concatenação binária e quando CONVERT
, ou CAST
, não precisa ser usado.
Neste exemplo, nenhuma CONVERT
função or CAST
é necessária porque este exemplo concatena duas cadeias de caracteres binárias.
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;
Neste exemplo, uma CONVERT
função or CAST
é necessária porque este exemplo concatena duas cadeias de caracteres binárias mais um espaço.
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));
Exemplos
Os exemplos de código do Transact-SQL deste artigo usa o banco de dados de exemplo AdventureWorks2022
ou AdventureWorksDW2022
, que pode ser baixado da home page Microsoft SQL Server Samples and Community Projects.
R. Usar concatenação de cadeia de caracteres
O exemplo a seguir cria uma única coluna sob o título Name
da coluna a partir de várias colunas de caracteres, com o sobrenome da pessoa seguido por uma vírgula, um único espaço e, em seguida, o nome da pessoa. O conjunto de resultados está em ordem alfabética crescente pelo nome da família e, em seguida, pelo nome.
SELECT (LastName + ', ' + FirstName) AS Name
FROM Person.Person
ORDER BY LastName ASC, FirstName ASC;
B. Combinar 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.
SELECT 'The order is due on ' + CONVERT(VARCHAR(12), DueDate, 101)
FROM Sales.SalesOrderHeader
WHERE SalesOrderID = 50001;
GO
Veja a seguir o conjunto de resultados.
------------------------------------------------
The order is due on 04/23/2007
C. Usar 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 para exibir o nome da família e a primeira inicial dos vice-presidentes da Adventure Works Cycles. Uma vírgula é adicionada após o nome da família e um ponto após a primeira inicial.
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
Veja a seguir o conjunto de resultados.
Name Title
------------- ---------------`
Duffy, T. Vice President of Engineering
Hamilton, J. Vice President of Production
Welcker, B. Vice President of Sales
D. Usar cadeias de caracteres grandes na 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 comprimento final do conjunto de resultados é 16.000, pois a avaliação da expressão começa da esquerda, ou seja, @x
@y
+ @z
+ => (@x + @z
) + . @y
Nesse caso, o resultado de (@x
+ @z
) é truncado em 8.000 bytes e, em seguida @y
, é adicionado ao conjunto de resultados, o que torna o comprimento final da cadeia de caracteres 16.000. Como @y
é uma cadeia de caracteres de tipo de valor grande, o truncamento não ocorre.
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
Veja a seguir o conjunto de resultados.
y
-------
16000
Exemplos: Azure Synapse Analytics e PDW (Analytics Platform System)
Os exemplos de código do Transact-SQL deste artigo usa o banco de dados de exemplo AdventureWorks2022
ou AdventureWorksDW2022
, que pode ser baixado da home page Microsoft SQL Server Samples and Community Projects.
E. Usar 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 para exibir o nome da família e a primeira inicial dos vice-presidentes em um banco de dados de exemplo. Uma vírgula é adicionada após o nome da família e um ponto após a primeira inicial.
SELECT (LastName + ', ' + SUBSTRING(FirstName, 1, 1) + '.') AS Name, Title
FROM DimEmployee
WHERE Title LIKE '%Vice Pres%'
ORDER BY LastName ASC;
Veja a seguir o conjunto de resultados.
Name Title
------------- ---------------
Duffy, T. Vice President of Engineering
Hamilton, J. Vice President of Production
Welcker, B. Vice President of Sales
Conteúdo relacionado
- || (Concatenação de strings) (Transact-SQL)
- += (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)