No PostgreSQL, o
date_trunc() função trunca um valor de data/hora para uma precisão especificada. Ele também pode truncar o valor para uma precisão especificada em um fuso horário especificado.
Você pode pensar nisso como uma versão de data do
trunc() função (que trunca números). Sintaxe
A sintaxe fica assim:
date_trunc(field, source [, time_zone ]) Onde:
fieldé a precisão para a qual truncar o valor de entrada (por exemplomonth,hour, etc). Veja abaixo uma lista completa de valores aceitáveis para este argumento.sourceé uma expressão de valor do tipo timestamp , carimbo de data e hora com fuso horário , ou intervalo . Observe que os valores do tipo data e tempo são convertidos automaticamente para timestamp ou intervalo , respectivamente.- O
time_zoneopcional argumento pode ser fornecido para especificar um fuso horário diferente.
O
field argumento pode ser qualquer um dos seguintes:- microssegundos
- milissegundos
- segundo
- minuto
- hora
- dia
- semana
- mês
- trimestre
- ano
- década
- século
- milênio
Exemplo básico
Aqui está um exemplo para demonstrar.
SELECT date_trunc('hour', timestamp '2020-06-30 17:29:31'); Resultado:
2020-06-30 17:00:00
Podemos ver que a parte de hora da data foi truncada de
17:29:31 para 17:00:00 . Isso porque usei hour para o primeiro argumento. Aqui está com valores diferentes para o primeiro argumento.
\x
SELECT
date_trunc('minute', timestamp '2020-06-30 17:29:31'),
date_trunc('day', timestamp '2020-06-30 17:29:31'),
date_trunc('month', timestamp '2020-06-30 17:29:31'),
date_trunc('year', timestamp '2020-06-30 17:29:31'); Resultado (usando saída vertical):
date_trunc | 2020-06-30 17:29:00 date_trunc | 2020-06-30 00:00:00 date_trunc | 2020-06-01 00:00:00 date_trunc | 2020-01-01 00:00:00
Neste caso eu usei
\x para habilitar a saída de exibição/vertical expandida, para que seja mais fácil ler os resultados. Com fuso horário
Aqui está um exemplo para demonstrar o
WITH TIME ZONE opção. SELECT
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+00'),
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+01'); Resultado:
date_trunc | 2020-07-01 03:00:00+10 date_trunc | 2020-07-01 02:00:00+10
O fuso horário local quando executei esses exemplos foi Austrália/Brisbane.
Você também pode adicionar o nome completo do fuso horário como um terceiro argumento.
SELECT
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+12', 'Pacific/Auckland'),
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+12', 'Pacific/Auckland'); Resultado:
date_trunc | 2020-06-30 15:00:00+10 date_trunc | 2020-06-30 15:00:00+10
Com intervalo
Aqui está um exemplo que usa um valor de intervalo em vez de uma data.
SELECT date_trunc('hour', interval '7 days 5 hours 15 minutes'); Resultado:
7 days, 5:00:00