
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;
SYSDATE | CURRENT_DATE |
---|---|
23/07/2024 22:51:58 | 23/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
).
SYSDATE | ADICIONA_MESES |
---|---|
23/07/2024 22:54:11 | 23/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.
SYSDATE | PROXIMO_DOMINGO |
---|---|
23/07/2024 23:00:27 | 28/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.
SYSDATE | ULTIMO_DIA_MES |
---|---|
23/07/2024 23:03:09 | 31/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;
SYSDATE | ARREDONDA | TRUNCA |
---|---|---|
23/07/2024 23:05:18 | 01/08/2024 | 01/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
).
SYSDATE | ANO |
---|---|
23/07/2024 23:08:01 | 2024 |
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;
SYSDATE | TO_CHAR |
---|---|
24/07/2024 00:01:30 | 24-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;
SYSDATE | INTERVAL_DAY |
---|---|
24/07/2024 00:10:57 | 26/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;
SYSDATE | INTERVAL_YEAR |
---|---|
24/07/2024 00:13:16 | 24/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_TIMESTAMP | LOCALTIMESTAMP |
---|---|
23/07/24 23:13:38,581711 -03:00 | 23/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.
DBTIMEZONE | SESSIONTIMEZONE |
---|---|
+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.
SYSDATE | NOVO_HORARIO |
---|---|
23/07/2024 23:26:44 | 24/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
comSESSIONTIMEZONE
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!
Ficou muito bom este tutorial.