terça-feira, 21 de dezembro de 2010

Aritimética de Datas no Oracle

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:

 

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:

 

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:

 

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: 

 

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.

Nenhum comentário :

Postar um comentário

Related Posts Plugin for WordPress, Blogger...