Aritmética de datas e INTERVAL
Some e subtraia datas com INTERVAL, calcule durações e crie filtros de datas relativos, como “últimos 7 dias”.
Aritmética de datas e INTERVAL é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
Revisão dos tipos de data e hora
Quatro tipos temporais fundamentais em PostgreSQL:
DATE— dia do calendário, sem horaTIME— hora do diaTIMESTAMP— data + hora, sem fusoTIMESTAMPTZ— data + hora + fuso (recomendado para eventos)
INTERVAL: um período de tempo
INTERVAL é uma duração. Você pode adicioná-lo ou subtraí-lo de uma data/marca de tempo:
SELECT NOW() + INTERVAL '1 day';
SELECT NOW() - INTERVAL '30 days';
SELECT NOW() + INTERVAL '3 months 2 weeks';
SELECT INTERVAL '1 hour' + INTERVAL '15 minutes';Unidades de INTERVAL
Você pode usar year, month, week, day, hour, minute, second (no singular ou plural):
SELECT INTERVAL '2 years 6 months';
SELECT INTERVAL '1 week';
SELECT INTERVAL '90 seconds';Filtros comuns para datas relativas
As consultas essenciais de «últimos N dias»:
SELECT * FROM orders
WHERE created_at >= NOW() - INTERVAL '7 days';
SELECT * FROM events
WHERE created_at >= CURRENT_DATE - INTERVAL '1 month';Adicionando dias a um DATE
O PostgreSQL também permite date + integer para «adicionar N dias»:
SELECT DATE '2024-01-01' + 30; -- 2024-01-31
SELECT DATE '2024-01-01' - 1; -- 2023-12-31Subtraindo duas marcas de tempo
A diferença entre duas marcas de tempo é um INTERVAL:
SELECT NOW() - '2024-01-01'::TIMESTAMP;
-- → '125 days 14:30:00'
SELECT EXTRACT(EPOCH FROM (NOW() - created_at))/3600 AS hours_ago
FROM events;AGE: diferença legível para humanos
AGE(end, start) retorna um INTERVAL de anos, meses e dias:
SELECT AGE(NOW(), birth_date) AS age_interval
FROM users WHERE id = 1;
SELECT EXTRACT(YEAR FROM AGE(birth_date)) AS age_in_years
FROM users;Adicionando meses — atenção
Adicionar um mês é uma operação aritmética de calendário. 2024-01-31 + 1 month = 2024-02-29 (ajustado):
SELECT DATE '2024-01-31' + INTERVAL '1 month'; -- 2024-02-29
SELECT DATE '2024-03-31' + INTERVAL '1 month'; -- 2024-04-30CURRENT_DATE versus NOW()
Os tipos retornados são diferentes — escolha o que melhor se adapta:
SELECT CURRENT_DATE; -- 2024-03-15 (DATE)
SELECT CURRENT_TIME; -- 14:30:00+02 (TIMETZ)
SELECT CURRENT_TIMESTAMP; -- 2024-03-15 14:30:00+02 (TIMESTAMPTZ)
SELECT NOW(); -- alias for CURRENT_TIMESTAMPConstruindo datas a partir de partes
Construa datas a partir de colunas inteiras:
SELECT MAKE_DATE(year, month, day) FROM birthdays;
SELECT MAKE_TIMESTAMP(2024, 3, 15, 14, 30, 0.0);Índices em expressões de data
Um índice em created_at lida bem com consultas por intervalo. Para «eventos em março», um filtro por intervalo é mais rápido do que o truncamento por mês:
-- Index-friendly:
WHERE created_at >= '2024-03-01' AND created_at < '2024-04-01';
-- Less friendly (works only with expression index):
WHERE date_trunc('month', created_at) = '2024-03-01';Revisão
A aritmética de datas em SQL é rica e confiável.
- INTERVAL para durações
- Adição/subtração direta
- AGE para períodos legíveis para humanos
- Intervalos semiabertos são os mais favoráveis aos índices
Verificação rápida
Qual expressão retorna os eventos dos últimos 7 dias?
Perguntas Frequentes
A aula “Aritmética de datas e INTERVAL” é grátis?
Sim — o texto completo de “Aritmética de datas e INTERVAL” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “Aritmética de datas e INTERVAL”?
Some e subtraia datas com INTERVAL, calcule durações e crie filtros de datas relativos, como “últimos 7 dias”. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Aritmética de datas e INTERVAL”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Academy?
Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Aritmética de datas e INTERVAL
- EXTRACT, DATE_TRUNC, AGE
- Fusos horários: TIMESTAMP em comparação com TIMESTAMPTZ
- Relatórios comuns de datas (MTD, WoW, YoY)