Translate

domingo, 9 de julho de 2017

Sql Server - função concat e operador de concatenação

Neste artigo, vamos apresentar exemplos da utilização do operador de concatenação e do uso da funçao concat no Sql Server. Tanto o "operador de concatenação" quanto a função "concat" servem para unir uma ou mais strings.

A função concat é mais simples de ser utilizada do que o operador de concatenação, pois ela ignora dados nulos, e concatena diferentes tipos de dados sem necessitar de conversão, porém só pode ser utilizada na versão 2012 ou em versões posteriores.

Caso tenha interesse faça o download dos exemplos ou veja os scripts no GitHub.

Operador de concatenação

O operador de concatenação é representados por "+".

coluna_1 + coluna_2 + coluna_3
Exemplo:

Vamos apresentar os endereços completos das filiais de uma rede de varejo. 
Será utilizado os dados das colunas da tabela "locacao_filiais", exibida a seguir.
Antes de cada endereço vai ser exibida a string "Endereço: ".

Tabela: locacao_filiais


Para exibirmos os campos da tabela "locacao_filiais" concatenados, executamos a sentença abaixo:

SELECT 
'Endereço: ' +
tipo_logradouro + ' ' + 
logradouro + ' ' +
CAST(numero AS VARCHAR) + ' ' +
complemento + ' ' +
bairro
FROM locacao_filiais;

Após a execução da sentença, teremos os campos concatenados . Conforme podemos visualizar na imagem abaixo:



Observações: 

Concatenamos espaço em branco (' ') entre os campos para os dados não fiquem "grudados" uns nos outros.

Repare que utilizamos a função "CAST" para converter o campo "numero" que é do tipo int (valor inteiro) para varchar (texto). Se concatenarmos valores numéricos e não utilizarmos o CAST ocorrerá o seguinte erro:

Mensagem 245, Nível 16, Estado 1, Linha 52
Falha ao converter o varchar valor 'Endereço: Avenida Domingos de Moraes ' para o tipo de dados int.

Você deve estar pensando o que ocorreu? Por que somente o primeiro registro apareceu concatenado? Cadê os outros?

Se você observar os dois últimos registros, verá que eles não possuem dados na coluna complementoou seja, os dados são nulos nesta coluna. Ao fazer uma concatenação com um dado nulo, o resultado é nulo.

Como vamos resolver isto?

Antes de fazer a concatenação da coluna complemento faremos uma verificação. Se houver dados no campo, faremos a concatenação com os dados deste campo. Caso contrário substituiremos o dado nulo por uma string vazia  ('').  Para isso utilizaremos a função coalesce, conforme exibido na sentença abaixo.

SELECT 
'Endereço: ' +
tipo_logradouro + ' ' + 
logradouro + ' ' +
CAST(numero AS VARCHAR) + ' ' +
COALESCE(complemento, '') + ' ' +
bairro
FROM locacao_filiais;

Após a execução da sentença, os dados dos três registros serão exibidos. Conforme podemos visualizar na imagem abaixo:



O nome da coluna será exibido como "(Nenhum nome de coluna)". Caso queira alterar este nome, crie um alias (apelido). Após o "AS" coloque o nome da coluna que você precisa. Neste exemplo, eu vou chamá-la de filiais.


SELECT 
'Endereço: ' +
tipo_logradouro + ' ' + 
logradouro + ' ' +
CAST(numero AS VARCHAR) + ' ' +
COALESCE(complemento, '') + ' ' +
bairro
AS filiais
FROM locacao_filiais;


Após a execução da sentença, o nome da coluna será exibido como "filiais", conforme exibido na imagem abaixo:



Função concat

A função concat surgiu a partir da versão 2012, logo ela funcionará nesta versão ou em versões posteriores. Ela tem função similar ao operador de concatenação "+". Ela possui duas  vantagens: além de unir valores numérico sem utilizar conversão, também ignora dados nulos.

Exemplo:

Este exemplo é bem parecido com o primeiro exemplo. 
Vamos apresentar os endereços completos das filiais de uma rede de varejo, mas agora será utilizada a função concat
Será utilizado os dados das colunas da tabela "locacao_filiais", exibida a seguir.
Antes de cada endereço vai ser exibida a string "Endereço: ".


Tabela: locacao_filiais


Na funcão concat os dados que serão utilizados deverão estar entre virgulas. 

CONCAT(coluna_1, coluna_2, coluna_3, ....)

Utilizamos a função concat na sentença abaixo:

SELECT
CONCAT
(
    'Endereço: ', tipo_logradouro' ', logradouro, ' ', numero, ' ', complemento, ' ', bairro
)
FROM locacao_filiais;

Observação: Concatenamos espaço em branco (' ') entre os campos para os dados não ficarem "grudados" uns nos outros.

Após a execução da sentença será exibido o resultado a seguir:


Perceba que foram exibidos os três registros concatenados e não houve a necessidade de se preocupar em tratar os dados nulos, pois na função concat eles são ignorados.

O nome da coluna será exibido como "(Nenhum nome de coluna)". Caso queira alterar este nome, crie um alias (apelido). Após o "AS" coloque o nome da coluna que você precisa. Neste exemplo, eu vou chamá-la de filiais.

SELECT
CONCAT
(
    'Endereço: ', tipo_logradouro' ', logradouro, ' ', numero, ' ', complemento, ' ', bairro
) AS filiais
FROM locacao_filiais;

Após a execução da sentença, o nome da coluna será exibido como "filiais", conforme exibido na imagem abaixo: 


Deixe o seu comentário ou sugestão.
Gostou?  Siga no Google + ou Facebook.

2 comentários: