sexta-feira, 18 de agosto de 2017

Oracle: Adicionando Dias/Horas/Minutos/Segundos ao um campo do tipo DATE

Algum tempo atrás, eu estava com problemas em verificar a diferença entre duas TimeStamps no MySQL. Um dos fatores que registrei foi as inúmeras soluções bizarras que as pessoas fizeram para contornar o problema, que envolviam dividir, e multiplicar os tempos, soma, converte, e dá-lhe gambiarras incompreensíveis. Algo parecido aconteceu comigo agora pouco, mas com Oracle.

O problema foi o seguinte: tenho um dado "Date" e preciso adicionar x minutos. Pesquisei, e a maioria dá uma resposta mirabulante, pega um dia, divide pelo números de segundos de um dia, multiplique por x, converte, desconverte, e fica um código feio, deselegante e cheia de cálculos que se você não sabe do que se trata, vai demorar para entender. Funçando um pouco na documentação, acho algo simples que resolve este problema: a função NUMTODSINTERVAL.

Deixa eu mostrar com um exemplo:

SYSDATE + NUMTODSINTERVAL(60,'MINUTE')

Simples e elegante. O SYSDATE representa o meu dado do tipo DATE, que no exemplo, pega a data e hora do sistema. Adicionando com essa função, na qual estou adicionando 60 minutos. Troca o "+" por "-", você subtrai. E também, no segundo parâmetro, além do 'MINUTE' posso alterar para 'DAY', 'HOUR' e 'SECOND'. Sem converter, sem nada.

Então fica a dica.

Nenhum comentário:

Postar um comentário