0Pricing
SQL Academy · Aula

EXTRACT, DATE_TRUNC, AGE

Extraia partes de uma data com EXTRACT, ajuste marcas de tempo para um limite com DATE_TRUNC e calcule diferenças legíveis para pessoas com AGE.

EXTRACT, DATE_TRUNC, AGE é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 2 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.

EXTRACT: extraindo uma parte da data

EXTRACT(part FROM ts) retorna um único componente numérico:

SELECT EXTRACT(YEAR  FROM created_at) AS yr,
       EXTRACT(MONTH FROM created_at) AS mo,
       EXTRACT(DAY   FROM created_at) AS d,
       EXTRACT(DOW   FROM created_at) AS day_of_week
FROM orders;

Partes comuns de EXTRACT

Partes úteis: YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, DOW (0=Sun), DOY (1–366), WEEK, QUARTER, EPOCH.

SELECT EXTRACT(EPOCH FROM (NOW() - created_at)) AS seconds_ago
FROM events;

DATE_TRUNC: ajustando para um limite

DATE_TRUNC(unit, ts) zera tudo abaixo da unidade — é a função mais útil para relatórios agrupados em intervalos:

SELECT date_trunc('day',   NOW());   -- 2024-03-15 00:00:00
SELECT date_trunc('week',  NOW());
SELECT date_trunc('month', NOW());
SELECT date_trunc('hour',  NOW());

Relatórios agrupados em intervalos

Receita mensal usando date_trunc:

SELECT date_trunc('month', created_at) AS month,
       SUM(total) AS revenue
FROM orders
GROUP BY 1
ORDER BY 1;

Acumulado no ano / acumulado no mês

Compare o período atual com o mesmo ponto do ano passado:

-- This month so far
SELECT SUM(total) FROM orders
WHERE created_at >= date_trunc('month', NOW())
  AND created_at <  date_trunc('month', NOW()) + INTERVAL '1 month';

AGE: diferença ciente do calendário

AGE retorna anos + meses + dias, não apenas dias:

SELECT AGE('2024-03-15', '2020-12-01');
-- → '3 years 3 months 14 days'

SELECT EXTRACT(YEAR FROM AGE('2024-03-15', '2020-12-01'));  -- 3

Comportamento de AGE com dois argumentos

O AGE com um único argumento faz a comparação com current_date:

SELECT AGE(birth_date) FROM users LIMIT 5;

Lógica do dia da semana

EXTRACT(DOW): 0=domingo … 6=sábado. ISO_DOW: 1=segunda-feira … 7=domingo.

SELECT * FROM orders
WHERE EXTRACT(ISODOW FROM created_at) IN (6, 7);  -- weekend orders

Fuso horário em EXTRACT

O EXTRACT em TIMESTAMPTZ usa o fuso horário da sessão. Use AT TIME ZONE para controlá-lo:

SELECT EXTRACT(HOUR FROM created_at AT TIME ZONE 'UTC') FROM events;
SELECT EXTRACT(HOUR FROM created_at AT TIME ZONE 'Europe/Berlin') FROM events;

Truncando por uma janela personalizada

Para janelas que não seguem o calendário (a cada 5 minutos), use aritmética:

SELECT to_timestamp(
  floor(EXTRACT(EPOCH FROM created_at) / 300) * 300
) AS bucket_5min,
COUNT(*)
FROM events
GROUP BY 1
ORDER BY 1;

Índices funcionais para truncamento

Se você usa date_trunc('day', created_at) com frequência em GROUP BY, um índice funcional ajuda:

CREATE INDEX events_day_idx ON events ((date_trunc('day', created_at)));

Revisão

EXTRACT + DATE_TRUNC + AGE atendem à maioria das necessidades de relatórios.

  • EXTRACT para partes individuais
  • DATE_TRUNC para ajustar a um limite
  • AGE para períodos cientes do calendário

Verificação rápida

Você quer uma contagem mensal de novos usuários. Qual função agrupa as datas por mês?

Perguntas Frequentes

A aula “EXTRACT, DATE_TRUNC, AGE” é grátis?

Sim — o texto completo de “EXTRACT, DATE_TRUNC, AGE” é 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 “EXTRACT, DATE_TRUNC, AGE”?

Extraia partes de uma data com EXTRACT, ajuste marcas de tempo para um limite com DATE_TRUNC e calcule diferenças legíveis para pessoas com AGE. 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 2 de 4.

Quanto tempo leva a aula “EXTRACT, DATE_TRUNC, AGE”?

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

  1. Aritmética de datas e INTERVAL
  2. EXTRACT, DATE_TRUNC, AGE
  3. Fusos horários: TIMESTAMP em comparação com TIMESTAMPTZ
  4. Relatórios comuns de datas (MTD, WoW, YoY)
← Voltar para SQL Academy