Finalizando o assunto sobre datas e campos de datas no banco de dados, hoje vamos ver como podemos alterar o formato de exibição, adicionar ou calcular a diferença entre os dias e como o SQL Server permite trabalhar sem alterar o fuso horário do sistema, mesmo que esteja em localização diferente.

ALTERANDO O FORMATO DE EXIBIÇÃO

Dentro do SQL Server podemos modificar o formato que queremos visualizar o resultado de uma consulta. Normalmente, quando finalizamos uma query, o formato retornado é Ano/MêS/Dia, porém, nem sempre queremos visualizar assim e com a função PARSE, é possível alterar para o formato que melhor lhe convir.

Se quiser ver quais formatos suportados e como utilizá-los, veja este link.

A função PARSE  não aceita valores nulos e caso haja, essa consulta é finalizada porém, o tal campo será exibido como NULL.

A Microsoft recomenda que esta função seja usada apenas quando for tratar de um campo passado como string. Se precisar converter um campo, utilizar as funções CAST & CONVERT para evitar uma possível queda de performance no ambiente.

ALTERANDO O FUSO HORÁRIO.

A função SWITCHOFFSET permite alterar o fuso horário quando a query é finalizada e nos retorna o resultado. Este resultado é o horário corrente da região onde o UTC foi passado para a consulta.

Lembrando que este valor não adiciona horas no horário atual no sistema, apenas nos mostra qual seria o horário do local desejado.

Veja como obtemos por exemplo, o horário atual que pega cidades como Nova Iorque, Toronto, Lima etc.

No Wikipédia é possível visualizar o mapa com cada zona de horário e as principais cidades.

ADICIONANDO E CALCULANDO A DIFERENÇA ENTRE DATAS

Um recurso muito interessante quando tratamos de datas é poder usar funções que nos retornam a diferença entre os dias ou até mesmo a soma. 

Essas funções adicionam precisão na manipulação de datas e em queries que são bases para relatórios gerenciais.

No primeiro exemplo, vamos ver a função DATEADD que adiciona dias ao dia atual, de acordo com sua necessidade.

No exemplo acima, na primeira coluna fiz uma operação de adição para ano, na segunda somei mês ao atual e na última coluna, temos adição de 20 minutos a hora atual do meu sistema operacional.

Já com a função de DATEDIFF, precisamos passar para o banco uma data de início e de fim para retornar a diferença entre eles. Vejamos:

Já neste exemplo abaixo, demonstro uma forma básica de calcular a diferença de horas usando a função DATEDIFF. O mesmo pode ser aplicado com a DATEADD, seguindo a mesma lógica.

A primeira coluna retornada na query eu puxei a data e hora do meu computador. Na segunda coluna eu calculei a diferença de hora com algum país que possui o fuso de três horas adiantadas e a terceira apenas a função para retornar fuso horário. Efeito de exemplo

Como podem ver, o sistema do banco pega a data final e subtrai com a inicial, do contrário, o resultado retornaria negativo.

VALIDANDO UM CAMPO DATA

Sempre que quiserem saber se um campo ou resultado passado é no formato de data, é possível utilizar a função ISDATE para tal. Quando executamos essa função, ela irá retornar um valor entre 0 e 1, sendo o 0 negativo e 1 positivo.

No exemplo abaixo, mostro como verificar utilizando a função:

Um fato curioso é que a documentação da Microsoft informa que se a função ISDATE se deparar com o formato DATETIME2 irá retornar erro. Tentei usar a conversão e de fato não foi executado.

Neste post final sobre o formato de data dentro do SQL Server, vimos diversas funções que nos permitem manipular, converter, confirmar, alterar fuso e até mesmo, pequenas operações matemáticas.

Saber manipular datas é fundamental em SQL principalmente na geração de relatórios. Não abordei todas as funções, apenas as principais mas, na documentação há informação completa sobre esse tipo de formato!

Espero que tenham curtido e aprovado o post!