Manipulação de Datas no Oracle – Parte 2

Compartilhe :

No post anterior sobre Oracle, vimos os conceitos básicos de manipulação e formatação de datas. Agora vamos avançar para cálculos com datas: como somar ou subtrair dias, comparar datas, encontrar a maior ou a menor data de uma lista, calcular meses entre duas datas e descobrir o próximo dia da semana.

Essas funções são muito usadas no dia a dia de quem trabalha com SQL, seja para gerar relatórios, calcular prazos ou validar períodos.

SYSDATE: a data e hora atual do servidor

A função SYSDATE retorna a data e a hora atuais do servidor onde o banco de dados Oracle está instalado. É comum usá-la a partir da tabela DUAL, uma tabela interna e vazia usada só para testes e cálculos rápidos:

SELECT SYSDATE FROM DUAL;

Para formatar a saída, use a função TO_CHAR:

SELECT TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "Agora" FROM DUAL;

Resultado:

Agora
-------------------
04-13-2016 11:45:51

Operações aritméticas com datas

O Oracle permite somar e subtrair valores diretamente de uma data. As operações possíveis são:

Operação O que faz
data + número Adiciona um número de dias à data
data - número Subtrai um número de dias da data
data - data Calcula a diferença em dias entre duas datas
data + número/24 Adiciona um número de horas à data

Exemplo prático, comparando a data de contratação com a data atual:

SELECT HIREDATE, HIREDATE - 7, SYSDATE - HIREDATE
FROM EMP
WHERE HIREDATE LIKE '%06%';

Somando e subtraindo dias

No Oracle, o cálculo com números sempre representa dias:

SELECT SYSDATE - 2 FROM DUAL;

Isso retorna o dia anterior a ontem. Já SYSDATE + 2 retorna o dia depois de amanhã.

Como o valor somado ou subtraído representa dias, é possível trabalhar com frações para calcular horas. Basta dividir por 24. Por exemplo, para somar 6 horas a uma data:

SELECT SYSDATE + 6/24 FROM DUAL;

A única das duas operações que aceita duas datas é a subtração, que retorna a diferença em número de dias.

Somando meses a uma data com ADD_MONTHS

Para adicionar meses a uma data, use a função ADD_MONTHS:

SELECT ADD_MONTHS(SYSDATE, 2) FROM DUAL;

O primeiro parâmetro é a data e o segundo é a quantidade de meses a adicionar (pode ser negativo, para subtrair).

Atenção: se a data informada for o último dia do mês (como 31 de janeiro), o resultado também será ajustado para o último dia do mês seguinte (28 ou 29 de fevereiro).

Encontrando a maior data com GREATEST

A função GREATEST retorna a maior data entre várias informadas como parâmetro:

SELECT GREATEST(SYSDATE, SYSDATE - 2, SYSDATE + 5, SYSDATE + 15, SYSDATE - 7) FROM DUAL;

Encontrando a menor data com LEAST

Da mesma forma, a função LEAST retorna a menor data entre as opções informadas:

SELECT LEAST(SYSDATE, SYSDATE - 1, SYSDATE + 3, SYSDATE + 10, SYSDATE - 3) FROM DUAL;

Último dia do mês com LAST_DAY

A função LAST_DAY retorna o último dia do mês de uma data informada:

SELECT LAST_DAY(SYSDATE) FROM DUAL;

Muito útil para calcular vencimentos ou fechar períodos mensais em relatórios.

Quantidade de meses entre duas datas com MONTHS_BETWEEN

A função MONTHS_BETWEEN calcula quantos meses existem entre duas datas. Se o período não for um mês exato, o resultado vem com casas decimais:

SELECT MONTHS_BETWEEN(SYSDATE - 10, SYSDATE + 30) FROM DUAL;

Próximo dia da semana com NEXT_DAY

A função NEXT_DAY retorna a próxima ocorrência de um dia da semana, a partir de uma data:

SELECT NEXT_DAY(SYSDATE, 'FRI') FROM DUAL;

Nesse exemplo, o comando retorna a data da próxima sexta-feira.

Conclusão

Com essas funções (SYSDATE, ADD_MONTHS, GREATEST, LEAST, LAST_DAY, MONTHS_BETWEEN e NEXT_DAY), você já consegue montar boa parte das consultas com cálculo de datas que aparecem no dia a dia de quem trabalha com Oracle. Combine essas funções com TO_CHAR e TO_DATE para ter controle total sobre entrada e saída de datas nas suas queries.

Se você gostou, compartilhe este post e aproveite para conferir a Parte 1 da série sobre manipulação de datas no Oracle.

Posts Similares