Trabalhando com datas no oracle

Ĉ¿

Vou falar um pouco sobre algumas funções de data que podem ser utilizadas no Oracle.

O Oracle tem muitas funções para trabalhar com datas, porém, vou deixar aqui somente as que acho mais importantes, inclusive, as que usei durante minha vida de Desenvolvedor Oracle.
SYSDATE

É uma das funções mais utilizadas para desenvolvimento e administração do banco. Está função retorna a data e a hora atual do banco de dados. O Formato desta data depende da configuração do seu banco e também do software que você está utilizando.
Código:
1

SQL> SELECT SYSDATE FROM dual;
Resultado:
1
2
3

SYSDATE
---------------------
06/04/2009 10:00:54

ADD_MONTHS

Com essa função, é possível você trabalhar com datas somando meses ou subtraindo meses.
Código:
1

SQL> SELECT ADD_MONTHS(SYSDATE,1) FROM DUAL;
Resultado:
1
2
3

ADD_MONTHS(SYSDATE,1)
--------------------
06/05/2009 10:13:01

LAST_DAY

Essa função é utilizada para retornar o ultimo dia do mês que você passa como parâmetro. Muito útil para saber quantos dias tem um mês.
Código:
1

SQL> SELECT last_day(sysdate) FROM dual;
Resultado:
1
2
3

LAST_DAY(SYSDATE)
-----------------
30/04/2009 10:17:00

NEXT_DAY

Essa função é utilizada para saber o próximo dia da semana, tendo como base o parâmetro data e o dia da semana. Os dias da semana são de 1(domingo) até 7(sábado).
Código:
1

SQL> SELECT sysdate, next_day(SYSDATE,7) FROM dual;
Resultado:
1
2
3

SYSDATE NEXT_DAY(SYSDATE,7)
----------- -------------------
06/04/2009 11/04/2009

MONTHS_BETWEEN

Essa função é utilizada para saber o número de meses que existem entre duas datas. Observe que se você colocar a data atual e depois a data final, o resultado será negativo. Para este exemplo, utilizei o ADD_MONTHS para somar 5 meses ao mês atual, porém, você pode inserir qualquer parâmetro no formato de data.
Código:
1

SQL> SELECT MONTHS_BETWEEN(ADD_MONTHS(SYSDATE,5),SYSDATE) FROM DUAL;
Resultado:
1
2
3

MONTHS_BETWEEN(ADD_MONTHS(SYSDATE)
------------------------------
5

Não poderia deixar faltar o calculo entre dois campos datas… uma dor de cabeça para muitos desenvolvedores… o motivo? É que quando calculado (subtraido) dois campos de data e hora, o resultado é uma conversão. Exemplo abaixo teria um resultado exatamente assim… 3,12013888888889, porém, quando usado a soma ao campo hora com valor 00:00, o que não influencia em nada o resultado, o Oracle converte novamente o calculo para data hora, ficando mais fácil de entender. Existem outras formas de fazer a conversão, multiplicando pela quantidade de minutos ou quantidade de horas existentes em um dia… cada problema exige uma solução. Da forma apresentada aqui é uma das formas que atendem a maioria dos problemas e alem de fácil é elegante.
Código:
1
2
3
4
5

SQL> SELECT TAB.DT_ADMISSAO,TAB.HR_ADMISSAO,TAB.DT_DEMISSAO,TAB.HR_DEMISSAO,
(TO_DATE(TO_CHAR(TAB.DT_DEMISSAO,'DD/MM/YYYY')||' '||TO_CHAR(TAB.HR_DEMISSAO,'HH24:MI'),'DD/MM/YYYY HH24:MI') -
TO_DATE(TO_CHAR(TAB.DT_ADMISSAO,'DD/MM/YYYY')||' '||TO_CHAR(TAB.HR_ADMISSAO,'HH24:MI'),'DD/MM/YYYY HH24:MI')) +
TO_DATE('00:00','HH24:MI') CALCULO
FROM TAB_EXEMPLO;
Resultado:
1
2
3

DT_ADMISSAO HR_ADMISSAO DT_DEMISSAO HR_DEMISSAO CALCULO
----------- ------------ -------------- -------------- ------------------
03/04/2009 07:27 06/04/2009 10:20 04/04/2009 02:53:00

O valor exato do calculo deveria ser 03/04/2009 02:53, porém, como estou trabalhando com datas e o primeiro dia do mês é o número 1, logo, quando vou calcular, ele soma o 1 ao valor do calculo, 3, dando como resultado o 04. Nada que uma função não resolva…

O Oracle não permite somar dois campos data, ele apresenta o erro ora-00975: date + date not allowed.

A forma mais fácil de você somar dois campos datas, é você trabalhar com horas e/ou minutos.

Caso queira somar uma hora a uma data, basta você somar (1/24) (equivale a uma hora). Caso queira somar um minuto, você tem que somar (1/24/60) ou (1/1440).

Explicando melhor
(1/24/60) ou (1/1440)

Em vermelho corresponde a quantidade que deseja somar, neste caso, uma hora ou um minuto
Em verde claro corresponde a quantidade de horas em um dia e em azul, temos a quantidade de minutos existente em uma hora.

No segundo exemplo, em vermelho, tem o mesmo significado do primeiro exemplo e em laranja, temos a quantidade de minutos existente em 24 horas

Comandos git do dia a dia

Ĉ¿ #Criando um projeto do zero echo "# UBBOAT_App" >> README.md git init git add README.md git commit -m "first commi...