|| (Concatenação de cordas) (Transact-SQL)
Aplica-se a:Banco de Dados SQL do AzureInstância Gerenciada SQL do Azurebanco de dados SQL no Microsoft Fabric
O operador ||
pipes em uma expressão de cadeia de caracteres concatena duas ou mais cadeias de caracteres ou binárias, colunas ou uma combinação de cadeias de caracteres e nomes de coluna em uma expressão (um operador de cadeia de caracteres). Por exemplo, SELECT 'SQL ' || 'Server';
retorna SQL Server
. O operador ||
segue o padrão ANSI SQL para concatenar cadeias de caracteres. No SQL Server, você também pode fazer concatenação de cadeia de caracteres usando +
operador e a função CONCAT()
.
Transact-SQL convenções de sintaxe
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 xml, json, image, ntextou tipos de dados de texto. Ambas as expressões devem ser do mesmo tipo de dados, ou uma expressão deve ser capaz de ser implicitamente convertida para o tipo de dados da outra expressão.
Tipos de devolução
Retorna o tipo de dados do argumento com a maior precedência. Para obter mais informações, consulte Precedência de tipo de dados.
Comentários
Alguns benefícios de usar a sintaxe de concatenação de cadeia de caracteres ANSI incluem:
Portabilidade: Usar o operador de
||
padrão ANSI para concatenação de cadeia de caracteres garante que seu código SQL seja portátil em diferentes sistemas de banco de dados. Isso significa que você pode executar as mesmas consultas SQL em várias plataformas de banco de dados sem modificação.Consistência: A adesão ao padrão ANSI promove a consistência em seu código SQL, facilitando a leitura e a manutenção, especialmente quando se trabalha em ambientes com vários sistemas de banco de dados.
Interoperabilidade: O padrão ANSI é amplamente reconhecido e suportado pela maioria dos sistemas de banco de dados compatíveis com SQL, aumentando a interoperabilidade entre diferentes sistemas e ferramentas.
Comportamento de truncamento de cadeia de caracteres
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 ||
(concatenação de cadeia de caracteres) se comporta de forma diferente quando trabalha com uma cadeia de caracteres vazia de comprimento zero do que quando trabalha 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 binária de comprimento zero pode ser especificada como 0x
sem quaisquer valores de byte especificados 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
Tal como acontece com as operações aritméticas que são executadas em valores NULL
, quando um valor NULL
é adicionado a um valor conhecido, o resultado é normalmente um valor NULL
. Uma operação de concatenação de cadeia de caracteres executada com um valor NULL
também deve produzir um resultado NULL
.
O operador ||
não honra a opção SET CONCAT_NULL_YIELDS_NULL
e sempre se comporta como se o comportamento ANSI SQL estivesse habilitado, produzindo NULL
se alguma das entradas estiver NULL
. Esta é a principal diferença de comportamento entre os operadores +
e ||
concatenação. Para obter mais informações, consulte SET CONCAT_NULL_YIELDS_NULL.
Utilização de CAST e CONVERT quando necessário
Uma conversão explícita em dados de caracteres 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 função CONVERT
ou CAST
é necessária porque este exemplo concatena duas cadeias 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 função CONVERT
ou CAST
é necessária porque este exemplo concatena duas cadeias 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 Transact-SQL neste artigo usam o banco de dados de exemplo
Um. Usar concatenação de cadeia de caracteres
O exemplo a seguir cria uma única coluna sob o título da coluna Name
a partir de várias colunas de caracteres, com o nome de família (LastName
) da pessoa seguido por uma vírgula, um único espaço e, em seguida, o primeiro nome (FirstName
) da pessoa. O conjunto de resultados está em ordem alfabética crescente pelo nome de família e, em seguida, pelo primeiro 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 numérico e data tipos de dados.
SELECT 'The order is due on ' || CONVERT(VARCHAR(12), DueDate, 101)
FROM Sales.SalesOrderHeader
WHERE SalesOrderID = 50001;
GO
Aqui está o conjunto de resultados.
------------------------------------------------
The order is due on 04/23/2007
C. Usar várias concatenações de cadeia 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 no Adventure Works Cycles. Uma vírgula é adicionada após o nome de 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
Aqui está 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. Use 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 comprimento da cadeia de caracteres final. O comprimento final do conjunto de resultados é 16.000, porque a avaliação da expressão começa a partir da esquerda, ou seja, @x
+ @z
+ @y
=> (@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
Aqui está o conjunto de resultados.
y
-------
16000
Conteúdo relacionado
- ||= (Atribuição composta) (Transact-SQL)
- + (concatenação de cordas) (Transact-SQL)
- CONCAT (Transact-SQL)
- += (Atribuição de concatenação de cadeia de caracteres) (Transact-SQL)
- BASE DE DADOS ALTER (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)
- Quais são as funções do banco de dados SQL?
- Operadores (Transact-SQL)
- SELECIONAR (Transact-SQL)
- Instruções SET (Transact-SQL)