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.
2 comentários:
Com Sysdate é fácil, nem precisava postar tem um monte disto na net.
Quero ver com um campo data de dentro de uma tabela.
Ótima explicação. Muito obrigado e parabéns!
Postar um comentário