CONCAT (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
Essa função retorna uma cadeia de caracteres resultante de concatenação ou junção de dois ou mais valores de cadeia de caracteres de ponta a ponta.
Observação
Para adicionar um valor de separação durante a concatenação, consulte CONCAT_WS.
Convenções de sintaxe de Transact-SQL
Sintaxe
CONCAT ( argument1 , argument2 [ , argumentN ] ... )
Argumentos
argument1, argument2 [ , argumentN ]
Uma expressão de qualquer valor de cadeia de caracteres. A função CONCAT
exige, pelo menos, dois argumentos e, no máximo, 254 argumentos.
Tipos de retorno
Um valor de cadeia de caracteres cujos comprimento e tipo dependem da entrada.
Comentários
CONCAT
usa um número variável de argumentos de cadeia de caracteres e os concatena em uma única cadeia de caracteres. Exige um mínimo de dois valores de entrada; caso contrário, CONCAT
gera um erro. CONCAT
converte implicitamente todos os argumentos nos tipos de cadeia de caracteres antes da concatenação. CONCAT
converte implicitamente os valores nulos em cadeias de caracteres vazias. Se CONCAT
receber argumentos com todos os valores NULL
, ele retornará uma cadeia de caracteres vazia do tipo varchar(1). A conversão implícita em cadeias de caracteres segue as regras existentes para conversões de tipo de dados. Para obter mais informações sobre conversões de tipo de dados, consulte CAST e CONVERT (Transact-SQL).
O tipo de retorno depende do tipo dos argumentos. Esta tabela ilustra o mapeamento:
Tipo de entrada | Tipo e comprimento da saída |
---|---|
1. Qualquer argumento de um tipo de sistema SQL-CLR, um UDT SQL-CLR ou nvarchar(max) | nvarchar(max) |
2. Caso contrário, qualquer o argumento do tipo varbinary(max) ou varchar(max) | varchar(max), a menos que um dos parâmetros seja um nvarchar de qualquer comprimento. Nesse caso, CONCAT retorna um resultado do tipo nvarchar(max). |
3. Caso contrário, qualquer argumento do tipo nvarchar de até 4000 caracteres (nvarchar(<= 4000)) | nvarchar(<= 4000) |
4. Em todos os outros casos | qualquer argumento do tipo varchar de até 8000 caracteres (varchar(<= 8000)), a menos que um dos parâmetros seja um nvarchar de qualquer comprimento. Naquele caso, CONCAT retorna um resultado do tipo nvarchar(max). |
Quando CONCAT
recebe argumentos de entrada nvarchar de comprimento <=4000 caracteres, ou argumentos de entrada varchar de comprimento <=8000 caracteres, conversões implícitas poderão afetar o comprimento das resultado. Outros tipos de dados têm comprimentos diferentes quando são convertidos implicitamente em cadeias de caracteres. Por exemplo, um int com o valor 14
tem um comprimento de string de 2, enquanto um float com o valor 1234.56789
tem um comprimento de string de 7 (1234.57
). Portanto, uma concatenação desses dois valores retorna um resultado com um comprimento não inferior a 9 caracteres.
Se nenhum dos argumentos de entrada tiver um tipo LOB (objeto grande) com suporte, o tipo retornado será truncado para 8.000 caracteres, independentemente do tipo retornado. Esse truncamento preserva espaço e dá suporte à eficiência na geração do plano.
CONCAT
pode ser executado remotamente em um servidor vinculado que esteja executando o SQL Server 2012 (11.x) e versões posteriores. Para servidores vinculados mais antigos, a operação CONCAT
ocorre localmente, depois que o servidor vinculado retornar os valores não concatenados.
Exemplos
R. Usar CONCAT
SELECT CONCAT ('Happy ', 'Birthday ', 11, '/', '25') AS Result;
Veja a seguir o conjunto de resultados.
Result
--------------------
Happy Birthday 11/25
B. Usar CONCAT com valores NULL
CREATE TABLE #temp (
emp_name NVARCHAR(200) NOT NULL,
emp_middlename NVARCHAR(200) NULL,
emp_lastname NVARCHAR(200) NOT NULL
);
INSERT INTO #temp
VALUES ('Name', NULL, 'Lastname');
SELECT CONCAT (emp_name, emp_middlename, emp_lastname) AS Result
FROM #temp;
Veja a seguir o conjunto de resultados.
Result
------------
NameLastname