В PostgreSQL date_trunc()
функцията съкращава стойност на дата/час до определена точност.
Може също да съкрати стойността до определена точност в определена часова зона.
Можете да го мислите като версия за дата на trunc()
функция (която съкращава числата).
Синтаксис
Синтаксисът е така:
date_trunc(field, source [, time_zone ])
Къде:
field
е точността, за която да се съкрати входната стойност (напримерmonth
,hour
и т.н.). Вижте по-долу за пълен списък с приемливи стойности за този аргумент.source
е израз на стойност от тип timestamp , клеймо за време с часова зона , илиинтервал . Обърнете внимание, че стойностите от тип дата ивреме се прехвърлят автоматично към timestamp илиинтервала , съответно.- Незадължителният
time_zone
може да бъде предоставен аргумент, за да посочите различна часова зона.
field
аргументът може да бъде някой от следните:
- микросекунди
- милисекунди
- втори
- минута
- час
- ден
- седмица
- месец
- тримесечие
- година
- десетилетие
- век
- хилядолетие
Основен пример
Ето пример за демонстрация.
SELECT date_trunc('hour', timestamp '2020-06-30 17:29:31');
Резултат:
2020-06-30 17:00:00
Можем да видим, че часовата част на датата е съкратена от 17:29:31
до 17:00:00
. Това е така, защото използвах hour
за първия аргумент.
Ето го с различни стойности за първия аргумент.
\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');
Резултат (с помощта на вертикален изход):
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
В този случай използвах \x
за да активирате разширен дисплей/вертикален изход, така че да е по-лесно да четете резултатите.
С часова зона
Ето пример за демонстрация на WITH TIME ZONE
опция.
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');
Резултат:
date_trunc | 2020-07-01 03:00:00+10 date_trunc | 2020-07-01 02:00:00+10
Местната часова зона, когато пуснах тези примери, беше Австралия/Бризбейн.
Можете също да добавите пълното име на часовата зона като трети аргумент.
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');
Резултат:
date_trunc | 2020-06-30 15:00:00+10 date_trunc | 2020-06-30 15:00:00+10
С интервал
Ето пример, който използва стойност на интервал вместо дата.
SELECT date_trunc('hour', interval '7 days 5 hours 15 minutes');
Резултат:
7 days, 5:00:00