O que são Funções de Data?

 

No Oracle, funções de data são utilizadas para manipular e formatar dados do tipo DATE, TIMESTAMP e intervalos de tempo. Elas permitem realizar operações como calcular diferenças entre datas, adicionar ou subtrair períodos de tempo, formatar datas em diferentes padrões e muito mais.

Vantagens de Usar Funções de Data

  • Manipulação Avançada de Datas: Facilita o cálculo e formatação de datas e horas em consultas SQL.
  • Eficiência e Precisão: Permite operações precisas e eficientes com dados temporais.
  • Flexibilidade: Suporta uma ampla variedade de formatos e operações com datas e horas.

Principais Funções de Data

SYSDATE e CURRENT_DATE
  • SYSDATE: Retorna a data e hora atuais do servidor.
  • CURRENT_DATE: Retorna a data e hora atuais da sessão do usuário, considerando o fuso horário da sessão.
SELECT SYSDATE, CURRENT_DATE FROM dual;
SYSDATECURRENT_DATE
23/07/2024 22:51:5823/07/2024 22:51:58

ADD_MONTHS

Adiciona um número especificado de meses a uma data.

 

SELECT SYSDATE, ADD_MONTHS(SYSDATE, 6) adiciona_meses FROM dual;

Essa consulta adiciona 6 meses à data atual (SYSDATE).

 

SYSDATEADICIONA_MESES
23/07/2024 22:54:1123/01/2025 22:54:11

MONTHS_BETWEEN

Calcula o número de meses entre duas datas.

 

SELECT MONTHS_BETWEEN('01/05/2024', '01/01/2024') meses_entre FROM dual;

Entre as datas ’01/05/2024′ e ’01/01/2024′ há uma diferença de 4 meses.

 

MESES_ENTRE
4

NEXT_DAY

Retorna a próxima data de um dia da semana específico após uma data dada.

 

SELECT SYSDATE, NEXT_DAY(SYSDATE, 1) AS proximo_domingo FROM dual;

O próximo domingo após a data atual é retornado pela consulta.

 

SYSDATEPROXIMO_DOMINGO
23/07/2024 23:00:2728/07/2024 23:00:27

Observação: Na função NEXT_DAY, você pode usar números para representar os dias da semana, conforme abaixo:

  • ‘1’ para domingo
  • ‘2’ para segunda-feira
  • ‘3’ para terça-feira
  • ‘4’ para quarta-feira
  • ‘5’ para quinta-feira
  • ‘6’ para sexta-feira
  • ‘7’ para sábado

Se o número especificado corresponder ao mesmo dia da semana da data fornecida, a função retornará a próxima ocorrência desse dia, não o mesmo dia. Por exemplo, se hoje for domingo e você usar ‘1’, a função retornará o próximo domingo, não hoje.

 


LAST_DAY

Retorna a última data do mês de uma data específica.

 

SELECT SYSDATE, LAST_DAY(SYSDATE) ultimo_dia_mes FROM dual;

O último dia do mês para a data atual é retornado pela consulta.

 

SYSDATEULTIMO_DIA_MES
23/07/2024 23:03:0931/07/2024 23:03:09

ROUND e TRUNC

As funções ROUND e TRUNC são usadas para arredondar e truncar datas, respectivamente. Essas funções são úteis quando você precisa ajustar uma data para um nível específico de precisão, como ano, mês ou dia.

  • ROUND: Arredonda uma data para a unidade especificada. Se a parte do intervalo que não está sendo arredondada estiver acima da metade, a função arredondará para cima; se estiver abaixo, arredondará para baixo.
  • TRUNC: Trunca uma data para a unidade especificada, removendo a parte da data que não está sendo retida.

Exemplo:

SELECT SYSDATE,
       ROUND(SYSDATE, 'MONTH') arredonda,
       TRUNC(SYSDATE, 'MONTH') trunca
  FROM dual;
SYSDATEARREDONDATRUNCA
23/07/2024 23:05:1801/08/202401/07/2024
  • ROUND(SYSDATE, 'MONTH') arredonda a data atual (SYSDATE) para o primeiro dia do próximo mês se a data estiver após o meio do mês atual; caso contrário, arredonda para o primeiro dia do mês atual.
  • TRUNC(SYSDATE, 'MONTH') trunca a data atual para o primeiro dia do mês atual.

Observação:

  • Arredondamento: Se a data estiver no meio do intervalo de arredondamento (por exemplo, mais da metade do mês), a função ROUND arredondará para cima. Caso contrário, arredondará para baixo. Por exemplo, se a data estiver em 15 de junho, ROUND arredondará para 1º de julho.
  • Truncamento: A função TRUNC sempre remove a parte da data que está fora da unidade especificada. Por exemplo, truncar para o mês sempre retornará o primeiro dia do mês atual.

Se precisar ajustar para outras unidades como ano ou dia, substitua 'MONTH' por 'YEAR', 'DAY', ou outros valores apropriados.

 


EXTRACT

Extrai um valor específico (como ano, mês, dia) de uma data.

 

SELECT SYSDATE, EXTRACT(YEAR FROM SYSDATE) AS ano FROM dual;

Nesta consulta EXTRACT(YEAR FROM SYSDATE) retorna o ano da data atual (SYSDATE).

 

SYSDATEANO
23/07/2024 23:08:012024

Observação: Você pode usar os seguintes valores para substituir YEAR na função EXTRACT:

  • YEAR: Para extrair o ano.
  • MONTH: Para extrair o mês.
  • DAY: Para extrair o dia.

Esses valores permitem que você obtenha diferentes componentes da data conforme necessário para suas consultas.

 


TO_DATE e TO_CHAR
  • TO_DATE: Converte uma string em uma data.
SELECT TO_DATE('2024-06-25', 'YYYY-MM-DD') TO_DATE FROM dual;
TO_DATE
25/06/2024
  • TO_CHAR: Converte uma data em uma string com um formato específico.
SELECT SYSDATE, TO_CHAR(SYSDATE, 'DD-MM-YYYY') TO_CHAR FROM dual;
SYSDATETO_CHAR
24/07/2024 00:01:3024-07-2024

INTERVAL

INTERVAL DAY TO SECOND e INTERVAL YEAR TO MONTH permitem armazenar e manipular intervalos de tempo. Aqui estão exemplos de como usar esses intervalos para adicionar períodos de tempo a uma data.

 

Para adicionar 2 dias e 3 horas à data atual:

 

SELECT SYSDATE,
       SYSDATE + (INTERVAL '2' DAY + INTERVAL '3' HOUR) interval_day
  FROM dual;
SYSDATEINTERVAL_DAY
24/07/2024 00:10:5726/07/2024 03:10:57

Observação: O INTERVAL '2' DAY define um intervalo de 2 dias, e o INTERVAL '3' HOUR define um intervalo de 3 horas. A adição desses intervalos resulta na data e hora atuais avançadas por esses períodos.

 

Para adicionar 1 ano, 5 meses e 3 meses à data atual:

 

SELECT SYSDATE,
       SYSDATE + INTERVAL '1-2' YEAR TO MONTH + INTERVAL '3' MONTH interval_year
  FROM dual;
SYSDATEINTERVAL_YEAR
24/07/2024 00:13:1624/12/2025 00:13:16

Observação: O INTERVAL '1-2' YEAR TO MONTH adiciona um intervalo de 1 ano e 2 meses, e o INTERVAL '3' MONTH adiciona mais 3 meses ao resultado anterior. A data resultante é avançada em 1 ano e 5 meses.

 


CURRENT_TIMESTAMP e LOCALTIMESTAMP
  • CURRENT_TIMESTAMP: Retorna a data e hora atuais com o fuso horário da sessão.
  • LOCALTIMESTAMP: Retorna a data e hora atuais sem o fuso horário.
SELECT CURRENT_TIMESTAMP, LOCALTIMESTAMP FROM dual;

Este exemplo retorna a data e hora atuais, incluindo o fuso horário da sessão para CURRENT_TIMESTAMP, e apenas a data e hora sem o fuso horário para LOCALTIMESTAMP.

 

CURRENT_TIMESTAMPLOCALTIMESTAMP
23/07/24 23:13:38,581711 -03:0023/07/24 23:13:38,581711

DBTIMEZONE e SESSIONTIMEZONE
  • DBTIMEZONE: Retorna o fuso horário do banco de dados.
  • SESSIONTIMEZONE: Retorna o fuso horário da sessão atual.
SELECT DBTIMEZONE, SESSIONTIMEZONE FROM dual;

Este exemplo retorna os fusos horários configurados para o banco de dados e para a sessão atual.

 

DBTIMEZONESESSIONTIMEZONE
+00:00-03:00

TO_TIMESTAMP

Converte uma string para um valor de TIMESTAMP.

 

SELECT TO_TIMESTAMP('2024-07-25 14:30:00', 'YYYY-MM-DD HH24:MI:SS') converte_para_timestamp FROM dual;

Neste exemplo, a string ‘2024-07-25 14:30:00’ é convertida para um valor de TIMESTAMP, representando a data e a hora especificadas.

 

CONVERTE_PARA_TIMESTAMP
25/07/24 14:30:00,000000000

NEW_TIME

Converte uma data para um horário em um fuso horário diferente.

 

SELECT SYSDATE, NEW_TIME(SYSDATE, 'PST', 'EST') novo_horario FROM dual;
  • SYSDATE: Retorna a data e hora atuais do servidor.
  • ‘PST’: Fuso horário de origem (Pacific Standard Time, UTC-08:00).
  • ‘EST’: Fuso horário de destino (Eastern Standard Time, UTC-05:00).

Neste exemplo, NEW_TIME(SYSDATE, 'PST', 'EST') converte a data e hora atuais (SYSDATE) do fuso horário PST para o fuso horário EST. A diferença entre PST e EST é de 3 horas, então a função ajusta a hora em 3 horas à frente.

 

SYSDATENOVO_HORARIO
23/07/2024 23:26:4424/07/2024 02:26:44

Observação:

  • NEW_TIME só suporta alguns fusos horários predefinidos e pode não reconhecer todos os fusos horários globais ou horários de verão.
  • Para fusos horários mais detalhados ou cálculos envolvendo horários de verão, considere usar CURRENT_TIMESTAMP com SESSIONTIMEZONE ou funções de conversão mais avançadas.

Se você precisar de um ajuste mais detalhado ou suportar uma variedade maior de fusos horários, você pode usar funções adicionais de manipulação de data e hora no Oracle.

Considerações Finais

 

As funções de data no Oracle são ferramentas essenciais para a manipulação e formatação de dados temporais. Elas são fundamentais para realizar cálculos precisos e formatar datas de acordo com as necessidades específicas de suas consultas e relatórios.

 

Se você tiver alguma dúvida ou sugestão, deixe um comentário abaixo!

1 comentário em “Funções de Data no Oracle”

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima