Aritmética DATE do PostgreSQL (-)
As funções aritméticas DATE do PostgreSQL permitem que você faça cálculos com valores de data, como encontrar a diferença entre duas datas. Essa funcionalidade é essencial para a análise de intervalos de tempo, agendamento e relatórios baseados em tempo.
Uso
A função aritmética DATE é usada quando você precisa calcular a diferença entre duas datas ou subtrair um intervalo de uma data. Quando duas datas são subtraídas, o resultado é um intervalo, especificamente em dias. Essa operação é usada com frequência em cenários como cálculo de idade, duração ou agendamento de tarefas.
SELECT date1 - date2 AS interval_result;
Nessa sintaxe, date1
e date2
são valores de data, e a operação de subtração -
calcula o intervalo entre eles.
Exemplos
1. Subtração básica de datas
SELECT '2023-10-10'::date - '2023-10-01'::date AS days_difference;
Esse exemplo calcula o número de dias entre 10 de outubro de 2023 e 1º de outubro de 2023, resultando em uma diferença de 9 dias.
2. Subtração de um intervalo
SELECT '2023-10-10'::date - INTERVAL '3 days' AS new_date;
Aqui, a operação subtrai 3 dias de 10 de outubro de 2023, resultando em uma nova data de 7 de outubro de 2023.
3. Cálculo da idade a partir da data de nascimento
SELECT CURRENT_DATE - birth_date AS age_in_days FROM users;
Este exemplo calcula a idade em dias de cada usuário na tabela users
, subtraindo birth_date
da data atual.
Dicas e práticas recomendadas
- Garanta que os tipos de dados estejam corretos. Sempre converta as strings para o tipo
date
explicitamente usando::date
para obter cálculos precisos. - Entenda os intervalos. Um intervalo representa um período de tempo e pode ser usado para subtrair durações específicas, como dias, meses ou anos, para garantir clareza e facilidade de manutenção.
- Opte por CURRENT_DATE. Utilize
CURRENT_DATE
para cálculos que envolvam a data atual para garantir que suas consultas sejam dinâmicas e atualizadas. - Conheça seus tipos de dados. Esteja ciente das diferenças entre
date
,timestamp
etimestamp with time zone
para evitar confusão, pois somentetimestamp with time zone
leva em conta os fusos horários.