sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo funciona date_trunc() en PostgreSQL

En PostgreSQL, el date_trunc() trunca un valor de fecha/hora con una precisión especificada.

También puede truncar el valor con una precisión específica en una zona horaria específica.

Podría pensar en ello como una versión de fecha del trunc() función (que trunca números).

Sintaxis

La sintaxis es así:

date_trunc(field, source [, time_zone ])

Dónde:

  • field es la precisión con la que se trunca el valor de entrada (por ejemplo, month , hour , etc). Consulte a continuación una lista completa de valores aceptables para este argumento.
  • source es una expresión de valor de tipo timestamp , marca de tiempo con zona horaria o intervalo . Tenga en cuenta que los valores de tipo fecha y tiempo se envían automáticamente a marca de tiempo o intervalo , respectivamente.
  • El time_zone opcional Se puede proporcionar un argumento para especificar una zona horaria diferente.

El field argumento puede ser cualquiera de los siguientes:

  • microsegundos
  • milisegundos
  • segundo
  • minuto
  • hora
  • día
  • semana
  • mes
  • cuarto
  • año
  • década
  • siglo
  • milenio

Ejemplo básico

Aquí hay un ejemplo para demostrarlo.

SELECT date_trunc('hour', timestamp '2020-06-30 17:29:31');

Resultado:

2020-06-30 17:00:00

Podemos ver que la parte de la hora de la fecha se ha truncado de 17:29:31 a 17:00:00 . Eso es porque usé hour para el primer argumento.

Aquí está con diferentes valores para el primer 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 salida 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

En este caso usé \x para habilitar la visualización expandida/salida vertical, para que sea más fácil leer los resultados.

Con zona horaria

Aquí hay un ejemplo para demostrar WITH TIME ZONE opción.

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

La zona horaria local cuando ejecuté estos ejemplos era Australia/Brisbane.

También puede agregar el nombre completo de la zona horaria como tercer 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

Con Intervalo

Aquí hay un ejemplo que usa un valor de intervalo en lugar de una fecha.

SELECT date_trunc('hour', interval '7 days 5 hours 15 minutes');

Resultado:

7 days, 5:00:00