PostgreSQL EXTRACT
A função EXTRACT do PostgreSQL é usada para recuperar subcampos específicos, como ano, mês, dia, hora, etc., dos valores de data/hora. É essencial para a manipulação e análise de data e hora em consultas SQL.
Uso
A função EXTRACT é particularmente útil quando você precisa isolar uma parte específica de um valor de data/hora para fins de filtragem, agrupamento ou exibição. Sua sintaxe é simples:
EXTRACT(field FROM source)
Nessa sintaxe, field representa a parte da data/hora que você deseja extrair (por exemplo, YEAR, MONTH, DOW, DOY, EPOCH), e source é qualquer expressão que retorne um valor timestamp, date, interval, ou time, não apenas literais.
Exemplos
1. Ano de extração
SELECT EXTRACT(YEAR FROM '2023-10-14'::date) AS year;
Este exemplo extrai o ano 2023 da data especificada.
2. Extração de mês da data atual
SELECT EXTRACT(MONTH FROM CURRENT_DATE) AS month;
Aqui, a função EXTRACT recupera o mês atual da data do sistema.
3. Extração de hora do carimbo de data/hora
SELECT EXTRACT(HOUR FROM TIMESTAMP '2023-10-14 15:23:45') AS hour;
Este exemplo extrai a hora 15 do carimbo de data/hora fornecido.
4. Extração do dia da semana
SELECT EXTRACT(DOW FROM CURRENT_DATE) AS day_of_week;
Este exemplo recupera o dia da semana, em que domingo é 0 e sábado é 6.
5. Usando EXTRACT com GROUP BY
SELECT EXTRACT(YEAR FROM order_date) AS order_year, COUNT(*)
FROM orders
GROUP BY order_year;
Este exemplo agrupa os pedidos por ano, demonstrando o uso de EXTRACT com GROUP BY.
Dicas e práticas recomendadas
- A precisão é importante. Verifique se o site
sourceestá no formato correto de data/hora para evitar erros ou resultados inesperados. - Combine com outras funções. Use EXTRACT com
GROUP BYouORDER BYpara organizar os resultados por intervalos de tempo. - Tenha em mente os fusos horários. Considere o contexto do fuso horário de seus dados para garantir uma extração precisa.
- Verifique se há valores nulos. Trate os possíveis nulos em campos de data/hora usando
COALESCEou funções semelhantes para evitar falhas de consulta. Por exemplo:
SELECT EXTRACT(YEAR FROM COALESCE(order_date, CURRENT_DATE)) AS year;
- Tipos de retorno. O EXTRACT retorna um valor de precisão dupla para todos os campos, exceto quando a fonte é um intervalo, em que ele retorna um número inteiro para campos como
YEAR,MONTH, etc. - EXTRACT vs. DATE_PART. Ambas as funções têm finalidades semelhantes, mas
DATE_PARTé uma sintaxe de função mais tradicional no PostgreSQL. Escolha com base em convenções pessoais ou de projeto.