PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как date_trunc() работи в PostgreSQL

В 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL заявка за изброяване на всички имена на таблици?

  2. Експертно ръководство за Slony репликация за PostgreSQL

  3. Има ли удар в производителността при използване на десетични типове данни (MySQL / Postgres)

  4. SSL за възли за PostgreSQL връзка

  5. Как да добавите PostgreSQL драйвер като зависимост в Maven?