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 |
Nenhum comentário :
Postar um comentário