Вы должны действительно исправить свой столбец timestamp
, чтобы он был реальной отметкой времени. Хранение значения даты / времени в виде строк - очень плохая идея. Называя столбцы так, как будто они были сохранены как правильный тип данных - ну, на мой взгляд, это граничит с халатностью.
Поскольку вы хотите выполнять поиск по временному диапазону, вы можете создать индекс для выражения:
create index idx_location_signals_id_time on location_signals(did, to_timestamp(timestamp, 'MM/DD/YY HH24:MI')::time));
Тогда вы можете выразить свою where
логику как:
where did = ? and
(to_timestamp(timestamp, 'MM/DD/YY HH24:MI')::time >= '19:00:00'::time or
to_timestamp(timestamp, 'MM/DD/YY HH24:MI')::time < '06:00:00'::time
)
Это должно использовать индекс для полного выражения.