Aritmética de Datas no Oracle

De Wiki do Ouro Minas Palace Hotel
Revisão de 20h34min de 18 de abril de 2015 por 2532252>Jefferson
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegação Ir para pesquisar

Eduardo Corrêa Gonçalves Instituto Brasileiro de Geografia e Estatística – IBGE E-mail: eduardo.correa@ibge.gov.br


1. Introdução

Este artigo descreve a maneira pela qual podem ser realizadas operações aritméticas envolvendo campos DATE no SGBD Oracle.


2. O Tipo de Dado DATE


Conforme todo desenvolvedor Oracle sabe, os campos do tipo DATE costumam ser usados em tabelas para a representação de informação referente à data e hora de algum evento. Campos do tipo DATE ocupam apenas 7 bytes e são capazes armazenar datas com a precisão na casa dos segundos; Melhor detalhando, um campo DATE é capaz de manter as seguintes informações temporais associadas a um determinado evento: século, ano, mês, dia, hora, minuto e segundo de ocorrência do evento.


Para aplicações onde necessita-se manter informações de tempo com maior precisão, o Oracle disponibiliza outro tipo de dado, denominado TIMESTAMP. Este tipo representa uma extensão do tipo DATE que é capaz de gerenciar informações na ordem de fração de segundo (milissegundos, microssegundos, etc).


3. Aritmética de Datas


O que poucos desenvolvedores Oracle sabem é que este SGBD disponibiliza uma aritmética bastante simples para a manipulação do tipo de dado DATE. É possível somar (e subtrair) constantes numéricas a uma data de maneira rápida e fácil.


Em operações aritméticas envolvendo datas, o Oracle interpreta constantes numéricas como quantidade de dias. Desta forma, se você deseja obter a data do dia seguinte através de uma instrução SQL, basta fazer SYSDATE + 1:


SELECT SYSDATE + 1 as AMANHA FROM DUAL;


De maneira análoga, se você quiser recuperar num mesmo SELECT a data corrente e também a data equivalente a data corrente mais 30 dias, basta executar a seguinte instrução:


SQL> SELECT SYSDATE, SYSDATE + 30 FROM DUAL;


SYSDATE SYSDATE+30


-------------------

25/06/07 25/07/07


Para obter a data da “semana passada” (data de 7 dias atrás), utilize a seguinte instrução:


SQL> SELECT SYSDATE, SYSDATE - 7 FROM DUAL;


SYSDATE SYSDATE - 7


-------------------

25/06/07 18/06/07


3.1 Lidando com Horas, Minutos e Segundos


Em muitas situações práticas poderemos estar interessados em adicionar ou subtrair não dias, mas horas, minutos ou segundos do valor de uma data. Isto também é possível no Oracle. No entanto, o SGBD solicitará com que seja especificada uma “fração de dia” adequada para a operação aritmética. Sabemos que um dia possui:


  -  24 horas.

  -  24 x 60 = 1440 minutos.

  -  24 x 60 x 60 = 86.400 segundos.


Com isto, se desejamos somar 5 minutos a uma determinada data no Oracle, devemos somar a fração 5/1440 a esta data! Observe este cálculo no exemplo a seguir:


SQL> SELECT

         TO_CHAR(SYSDATE,‘DD/MM/YYYY HH24:MI:SS’) AS AGORA,

         TO_CHAR(SYSDATE + 5/1440, ‘DD/MM/YYYY HH24:MI:SS’) AGORA_MAIS_5_MIN

         FROM DUAL;



AGORA                                        AGORA_MAIS_5_MIN

-------------------                   -------------------

25/06/2007 18:18:29            25/06/2007 18:23:29



Para, por exemplo, subtrair 30 segundos, pode-se utilizar o SELECT abaixo:


SQL> SELECT

   TO_CHAR(SYSDATE,‘DD/MM/YYYY HH24:MI:SS’) AS AGORA,

   TO_CHAR(SYSDATE - 30/86400, ‘DD/MM/YYYY HH24:MI:SS’) TRINTA_SEG_ATRAS

   FROM DUAL;

 

AGORA                                      TRINTA_SEG_ATRAS 

--------------------                ------------------

25/06/2007 18:22:42          25/06/2007 18:22:12



Em resumo: Adicionar 1/24 significa somar uma hora a data; Adicionar 1/1440, significa adicionar um minuto; e somar 1/86400 significa somar um segundo. É importante deixar claro que a aritmética do Oracle não permite operações de multiplicação e divisão de constantes sobre datas. Apenas a soma e subtração são disponibilizadas.


Eduardo Corrêa Gonçalves Doutorando e mestre em Ciência da Computação pelo Instituto de Computação da Universidade Federal Fluminense (IC/UFF). Atua principalmente nas seguintes linhas de pesquisa: Mineração de Dados, Algoritmos, Banco de Dados e XML.

O que você achou deste post? Gostei (9) (4) Comentário | Tire sua dúvida


Leia mais em: Aritmética de Datas no Oracle http://www.devmedia.com.br/aritmetica-de-datas-no-oracle/5778#ixzz3KeIgzwD1


Texto retirado do site: http://www.devmedia.com.br/aritmetica-de-datas-no-oracle/5778