PostgreSQL DATE_TRUNC
A função `DATE_TRUNC` no PostgreSQL é utilizada para truncar uma data ou um registro de data e hora para uma precisão específica, como hora, dia ou mês. É útil em cenários em que você precisa agregar dados em intervalos de tempo específicos.
Uso
A função `DATE_TRUNC` é utilizada quando você precisa alinhar datas e registros de data e hora a um determinado nível de precisão para análise ou relatório. Geralmente é usado em conjunto com funções agregadas para resumir dados em períodos de tempo definidos.
sql
DATE_TRUNC('precision', source_date)
Nessa sintaxe, `'precision'` especifica o nível em que a data será truncada (por exemplo, 'hour', 'day') e `source_date` é a data ou o carimbo de data/hora a ser truncado. A `source_date` pode ser uma coluna em uma tabela ou qualquer expressão que resulte em uma data ou carimbo de data/hora.
Opções de precisão
O PostgreSQL oferece suporte a vários níveis de precisão para truncamento, incluindo:
- `second`
- `minute`
- `hour`
- `day`
- `week`
- `month`
- `quarter`
- `year`
- `decade`
- `century`
- `millennium`
Exemplos
1. Truncar para o dia
sql
SELECT DATE_TRUNC('day', TIMESTAMP '2023-10-04 15:23:45');
Este exemplo trunca o carimbo de data/hora para o início do dia, resultando em `2023-10-04 00:00:00`. Se a data de origem já estiver na precisão especificada, como `2023-10-04 00:00:00`, o resultado permanecerá inalterado.
2. Truncar para o mês
sql
SELECT DATE_TRUNC('month', TIMESTAMP '2023-10-04 15:23:45');
Aqui, o carimbo de data/hora é truncado até o início do mês, retornando `2023-10-01 00:00:00`.
3. Truncar para agregação
sql
SELECT DATE_TRUNC('week', order_date) AS week_start, COUNT(*)
FROM orders
GROUP BY week_start;
Este exemplo trunca `order_date` para o início de cada semana para agrupar os pedidos por intervalos semanais, fornecendo uma contagem de pedidos por semana.
Dicas e práticas recomendadas
- Escolha a precisão correta. Selecione o nível de precisão que se alinha às suas necessidades de análise de dados, como "dia" para resumos diários ou "mês" para tendências mensais.
- Combine com agregados. Use `DATE_TRUNC` com funções de agregação como `COUNT`, `SUM` ou `AVG` para realizar análises de dados baseadas em tempo.
- Tenha em mente os fusos horários. Certifique-se de que os carimbos de data/hora estejam no fuso horário correto para evitar imprecisões ao truncar. Use `AT TIME ZONE` para o tratamento explícito do fuso horário, por exemplo, `DATE_TRUNC('day', timestamp_column AT TIME ZONE 'UTC')`.
- Otimize o desempenho. A truncagem de grandes conjuntos de dados pode consumir muitos recursos; considere indexar suas colunas de data com um índice de árvore B para melhorar o desempenho da consulta.