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