PostgreSQL TIMESTAMP
O PostgreSQL oferece suporte robusto para tipos de dados de data e hora, incluindo `TIMESTAMP SEM FUSO HORÁRIO`, que armazena data e hora sem um fuso horário. Esses recursos são essenciais para tarefas precisas de controle de tempo e manipulação de dados.
Uso
Os tipos e funções de dados de data e hora, como `TIMESTAMP WITHOUT TIME ZONE`, são usados quando você precisa armazenar dados precisos de data e hora ou realizar operações com esses dados. Eles são cruciais para aplicativos que requerem registro preciso de tempo, programação e análise de dados históricos.
sql
SELECT column_name
FROM table_name
WHERE timestamp_column = TIMESTAMP 'YYYY-MM-DD HH:MI:SS';
Nessa sintaxe, `TIMESTAMP 'YYYY-MM-DD HH:MI:SS'` é usado para definir uma data e hora específicas para comparar com as entradas em `timestamp_column`.
Exemplos
1. Uso básico de TIMESTAMP
sql
SELECT order_id
FROM orders
WHERE order_date = TIMESTAMP '2023-10-15 14:30:00';
Essa consulta seleciona pedidos da tabela `orders` em que a `order_date` corresponde ao carimbo de data/hora especificado.
2. Extração de partes de um TIMESTAMP
sql
SELECT EXTRACT(YEAR FROM order_date) AS order_year
FROM orders;
Aqui, a função `EXTRACT` recupera a parte do ano da coluna `order_date` para cada linha da tabela `orders`.
3. Cálculo de diferenças de datas
sql
SELECT order_id, delivery_date - order_date AS delivery_duration
FROM orders;
Este exemplo calcula a duração entre `order_date` e `delivery_date` para cada pedido e a retorna como `delivery_duration`.
4. Usando TIMESTAMP COM FUSO HORÁRIO
sql
SELECT order_id
FROM orders
WHERE order_date AT TIME ZONE 'UTC' = TIMESTAMP '2023-10-15 14:30:00';
Este exemplo demonstra como usar `TIMESTAMP WITH TIME ZONE` para levar em conta as diferenças de fuso horário, convertendo `order_date` em um fuso horário específico.
5. Truncando datas com DATE_TRUNC
sql
SELECT DATE_TRUNC('month', order_date) AS month_start
FROM orders;
Essa consulta usa a função `DATE_TRUNC` para truncar `order_date` para o início do mês de cada registro.
Dicas e práticas recomendadas
- Use a precisão adequada. Considere o uso de `TIMESTAMP WITH TIME ZONE` se o aplicativo exigir que você conheça os fusos horários.
- Colunas de registro de data e hora do índice. A indexação pode acelerar significativamente as consultas que envolvem comparações de carimbo de data/hora. No entanto, as estratégias de indexação podem variar de acordo com os padrões de consulta e devem ser avaliadas caso a caso.
- Seja consistente com os formatos. Sempre use o mesmo formato de data e hora para evitar confusão e erros.
- Utilize as funções de data com sabedoria. Funções como `AGE`, `NOW` e `DATE_TRUNC` podem simplificar cálculos complexos de datas.
- Cuidado com o horário de verão. Quando você usa `TIMESTAMP WITH TIME ZONE`, o PostgreSQL lida com as alterações do horário de verão ajustando automaticamente a hora armazenada para manter a precisão.