Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2017 (14.x) e versões
posteriores Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL analytics endpoint in Microsoft Fabric
Warehouse em Microsoft Fabric
SQL database in Microsoft Fabric
Essa função retorna uma cadeia de caracteres resultante da concatenação, ou junção, de dois ou mais valores de cadeia de caracteres de maneira de ponta a ponta. Ele separa esses valores de cadeia de caracteres concatenados com o delimitador especificado no primeiro argumento de função. (CONCAT_WS indica concatenar com separador.)
Sintaxe
CONCAT_WS ( separator , argument1 , argument2 [ , argumentN ] ... )
Argumentos
separador
Uma expressão de qualquer tipo de caractere (char, nchar, nvarcharou varchar).
argumento1, argument2 [ , argumentN ]
Uma expressão de qualquer valor de cadeia de caracteres. A função CONCAT_WS requer pelo menos dois argumentos, e não mais de 254 argumentos.
Tipos de devolução
Um valor de cadeia de caracteres cujo comprimento e tipo dependem da entrada.
Comentários
CONCAT_WS usa um número variável de argumentos de cadeia de caracteres e os concatena (ou une) em uma única cadeia de caracteres. Ele separa esses valores de cadeia de caracteres concatenados com o delimitador especificado no primeiro argumento de função.
CONCAT_WS requer um argumento separador e um mínimo de dois outros argumentos de valor de cadeia de caracteres; caso contrário, CONCAT_WS gera um erro.
CONCAT_WS converte implicitamente todos os argumentos em tipos de cadeia de caracteres antes da concatenação.
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 comportamento e conversões de tipo de dados, consulte CONCAT (Transact-SQL).
Tratamento de valores NULL
CONCAT_WS ignora a configuração SET CONCAT_NULL_YIELDS_NULL { ON | OFF }.
Se CONCAT_WS receber argumentos com todos os valores NULL, ele retornará uma cadeia de caracteres vazia do tipo varchar(1).
CONCAT_WS ignora valores nulos durante a concatenação e não adiciona o separador entre valores nulos. Portanto, CONCAT_WS pode lidar de forma limpa com concatenação de cadeias de caracteres que podem ter valores "em branco" - por exemplo, um segundo campo de endereço. Para obter mais informações, consulte Exemplo B.
Se um cenário envolver valores nulos separados por um delimitador, considere a função ISNULL. Para obter mais informações, consulte Exemplo C.
Exemplos
Um. Concatenar valores com separador
Este exemplo concatena três colunas da tabela sys.databases, separando os valores com um hífen cercado por espaços (-).
SELECT CONCAT_WS(' - ', database_id, recovery_model_desc, containment_desc) AS DatabaseInfo
FROM sys.databases;
Aqui está o conjunto de resultados.
DatabaseInfo
-----------------
1 - SIMPLE - NONE
2 - SIMPLE - NONE
3 - FULL - NONE
4 - SIMPLE - NONE
B. Ignorar valores NULL
Este exemplo ignora NULL valores na lista de argumentos e usa um valor separador de vírgula (,).
SELECT CONCAT_WS(',', '1 Microsoft Way', NULL, NULL, 'Redmond', 'WA', 98052) AS Address;
Aqui está o conjunto de resultados.
Address
--------------------------------
1 Microsoft Way,Redmond,WA,98052
C. Gerar dados formatados em CSV a partir da tabela
Este exemplo usa um valor separador de vírgula (,) e adiciona o caractere de retorno de carro CHAR(13) no formato de valores separados por vírgulas do conjunto de resultados.
SELECT STRING_AGG(
CONCAT_WS(',', database_id, recovery_model_desc, containment_desc), CHAR(13)
) AS DatabaseInfo
FROM sys.databases;
Aqui está o conjunto de resultados.
DatabaseInfo
-------------
1,SIMPLE,NONE
2,SIMPLE,NONE
3,FULL,NONE
4,SIMPLE,NONE
CONCAT_WS ignora NULL valores nas colunas. Envolva uma coluna anulável com a função ISNULL e forneça um valor padrão. Por exemplo:
SELECT STRING_AGG(
CONCAT_WS(',', database_id, ISNULL(recovery_model_desc, ''), ISNULL(containment_desc, 'N/A')), CHAR(13)
) AS DatabaseInfo
FROM sys.databases;