Вы можете преобразовать все в один и тот же часовой пояс, чтобы вы могли сравнить их с (если часовой пояс был установлен):
select current_time, current_time at time zone 'gmt';
timetz | timezone
-------------------+-------------------
20:50:51.07742-07 | 03:50:51.07742+00
Если часовой пояс не установлен, и вам нужно исправить его в некотором локальномвремя:
select now()::time, now()::time + '+8:00'::interval;
now | ?column?
-----------------+-----------------
20:57:49.420742 | 04:57:49.420742
Как только вы получите желаемое время, просто извлеките час, и вы можете использовать простое условие, чтобы выбрать правильное время.
select *
from
(select extract(hour from now()::time + '+8:00'::interval) as hour) as t
where hour between 8 and 16;