Чтобы усечь временную метку до ближайшего часа для любого заданного времени в PostgreSQL, вы можете использовать функцию DATE_TRUNC(). Функция DATE_TRUNC() используется для усечения даты или временной метки до заданного уровня точности. Она позволяет округлить дату или временную метку до определенной единицы измерения, такой как год, квартал, месяц, неделя, день, час и т. д. В нашем случае мы будем усекать временную метку до ближайшего часа. Также мы заполним временную метку ближайшим часом, основываясь на столбце даты в таблице postgresql.
Синтаксис функции DATE_TRUNC() в PostgreSQL:
DATE_TRUNC(unit、source)
unit:
Указывает единицу, до которой вы хотите усечь дату или временную метку (например, “год”, “квартал”, “месяц”, “неделя”, “день”, “час” и т. д.).
source:
Дата или временная метка, которую вы хотите усечь.
В нашем случае. Значение единицы измерения должно быть “час“.
Усечение временной метки до ближайшего часа в postgresql – функция DATE_TRUNC() :
Для того чтобы усечь временную метку до ближайшего часа в нашем примере, мы будем использовать функцию DATE_TRUNC().
В приведенном ниже примере мы передадим час в качестве аргумента “единица” и дату в качестве аргумента “источник”, чтобы усечь временную метку до ближайшего часа
SELECT DATE_TRUNC('hour', '2024-02-24 15:30:45'::timestamp) AS nearest_hour_timestamp;
Результат:

Заполнение временной метки с ближайшим часом в таблице PostgreSQL с помощью DATE_TRUNC()
Мы будем использовать таблицу Student_detail в качестве примера, чтобы показать, как заполнить первый день недели (понедельник) из даты в PostgreSQL
Student_detail:

В таблице выше мы будем использовать функцию DATE_TRUNC(), которая принимает в качестве аргумента “hour” и столбец с именем “birthdaytime”. Она усечет дату до ближайшего часа на основе столбца “время рождения” и сохранит в новом столбце таблицы postgresql, как показано ниже
SELECT *, DATE_TRUNC('hour', birthdaytime::timestamp) AS nearest_hour_timestamp from Student_detail;
Таким образом, в результирующей таблице будет столбец Nearest_hour_timestamp.
Результат:
