PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como date_trunc() funciona no PostgreSQL


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 exemplo month , 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_zone opcional 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