Neste primeiro post quero falar a respeito de como podemos tratar valores de string no SQL Server e nos beneficiar para limpeza de resultados. Além disso, iremos aprender como concatenar colunas e substituir valores indesejados como o NULL por um a nossa escolha.

O primeiro ponto que temos que ter em mente é: quais os data type do tipo string na linguagem SQL?
Dentro da linguagem temos dois tipos básicos que são o char e o varchar, além deles, podemos adicionar suas variações unicode que são o Nvarchar e o NChar. Estes dois últimos aceitam uma gama maior de formatos inclusive os símbolos de escrita que vemos em alguns idiomas e em campos criptografados.

Uma dica: em alguns casos, é comum surgir textos que também são utilizados como função ou algum objeto interno de sistema do banco. Em quase todos os casos, isto não afeta o resultado final da query e sempre retorna o conjunto desejado porém, isto pode impactar na performance da query. Assim sendo, quando esse tipo de situação acontecer, coloque este objeto ou função entre os colchetes. Exemplo [NAME], o banco automaticamente irá entender que e uma coluna para NOME.

NOTA: se for habilitar o always encrypted(aqui e aqui) em alguma coluna, utilize o NCHAR ou NVARCHAR para melhor correspondência.

O data type do tipo char possui um valor de armazenamento fixo de 8kb com a capacidade máxima de 8000 caracteres na criação da coluna. Passando deste valor, irá acusar erro na execução.

O tipo varchar pode ser caracterizado com um formato variável podendo ir de 1 até 8000 ou então, podemos definir seu valor como MAX que irá sinalizar ao sistema do banco que esta coluna aceita até 2GB de dados para armazenamento. Acima disso, entra os tipos caracterizados como LOB (large object).

E como dito antes, os caracteres derivados Nchar e Nvarchar seguem a mesma linha, com a diferença que aceitam valores do tipo unicode que não são interpretados pelos tipos char e varchar e além disso, ambos não podem passar de 4000 caracteres; Quando definimos o MAX como tamanho de armazenamento, também estamos limitando ao máximo de 2GB.

Um erro que alguns podem pensar é que quando definimos um valor numérico para um data type do tipo texto como por exemplo: varchar(100), estamos definindo o numero de caracteres que aquela coluna terá, porém, o valor numérico aplicado ali, define o tamanho da cadeia de caracteres que aquela coluna irá aceitar armazenar sem acusar erro para reduzir o tamanho.

Se na criação da coluna não for especificado um valor para o armazenamento, o padrão é assumir como 1 e se for realizar uma operação de conversão sem especificar o tamanho, por padrão será 30.

E quando escolher entre char, varchar e varchar(max)?

Bem, esta pode ser uma dúvida comum quando vamos criar tabelas e inserir dados. A própria Microsoft na documentação da linguagem T-SQL aconselha a usar cada uma nas seguintes situações:
char: quando temos certeza que naquela coluna o registro será fixo e consistente. E mesmo que haja update nesta coluna, o tamanho da string ali, não irá variar. Os valores de tamanho fixo apresentam uma pequena queda quando passam pelo processo de leitura, eles não são otimizados para este processo.

varchar: quando temos coluna com tamanho variável e pouco precisa para fixarmos um valor para tal. As colunas varchar, apresentam uma pequena queda de desempenho para update.

CONTROLANDO O ARMAZENAMENTO DA COLUNA: ANSI_PADDING

Quando armazenamos valores do tipo char, varchar, binary e varbinary nas colunas, algumas vezes estes costumam variar, não receber valor (NULL) ou até mesmo, ter espaçamento entre os registros de tal. Se quisermos melhorar como o SQL trata essas colunas, podemos especificar a configuração SET ANSI_PADDING na criação da coluna ou ativação por padrão na configuração do banco.

Quando ativamos esse recurso e inserimos dados nesta coluna, as linhas que não preencherem todo o espaço que lhe é permitido, o próprio banco irá preencher com espaço vazio completando até chegar ao tamanho limite.Veja abaixo

Agora veja quando desativamos o ANSI_PADDING.

CONCATENANDO STRINGS ENTRE COLUNAS

Quando queremos concatenar colunas para exibir um resultado único podemos utilizar da função concat ou até mesmo e ainda que queira utilizar estas funções, podemos fazer de forma manual, apenas com o sinal de adição que o SQL Server entende que aquela operação envolvida é para concatenar as colunas e retornar uma coluna única com os dois valores agregados.

Esse recurso é muito utilizado quando queremos concatenar nome e sobrenome, endereço completo e etc.

Veja abaixo como utilizamos o recurso de concatenação:

No próximo exemplo, vamos concatenar duas colunas utilizando a função CONCAT:

E para finalizar, o ultimo exemplo de concatenação:

O concat também pode agrupar colunas que possuem null em seu registro, este apenas não é exibido uma vez que o sistema do banco considera o null como vazio:

FUNÇÃO COALESCE

É uma função que permite substituir um valor null por um novo valor passado na função coalesce. Um fato interessante é que o coalesce é uma forma abreviada e otimizada da expressão case.

veja abaixo, como substituímos o null na coluna com o coalesce.

Como podemos ver, a coluna region que possui NULL em seus valores. Ao ser aplicado a substituição com coalesce, passa a retornar o underscore.

SOBRE CAST E CONVERT.

Não existe uma diferença entre as funções de CAST e CONVERT que sejam tão expressivas para se destacar. Fica a critério a escolha da função e qual se encaixa melhor, porém, uma situação que vale ressaltar neste post é que o CONVERT permite maior liberdade na exibição de resultados que a função CAST. Então, se quiser uma exibição mais customizada e controlada, utilize a função CONVERT.

Este foi um post sobre como podemos tratar valores string no banco SQL Server para melhor formatação e exibição. Vimos os data types, suas particularidades, como o banco armazena valores de texto e a diferença entre CAST e CONVERT.

Espero que tenham gostado e sigam para mais postagens sobre!

Abraços e saúde!