#sql #postgresql
#sql #postgresql
Вопрос:
У меня есть столбец с именем office_hours
с типом данных timerange
, который был определен через:
create type timerange as range (subtype = time)
Я хочу написать запрос, который проверяет, включен ли now()
в этот временной диапазон. То, что я ищу, это что-то похожее на:
select now() <@ office_hours from users where office_hours is not null;
Всякий раз, когда я пытаюсь выполнить этот запрос, я получаю это сообщение об ошибке:
Каков правильный способ запросить, содержит ли timerange now()
?
Ответ №1:
Сообщение об ошибке уже давало хороший намек. Поскольку у вас есть возможность создать time
диапазон, вам нужно будет привести now()
к time, прежде чем проверять наличие содержимого.
Рассмотрим:
select now()::time <@ office_hours from users where office_hours is not null;
create type timerange as range (subtype = time);
select now(), now()::time <@ timerange('[20:00,23:00]') contained;
Выдает:
| now | contained |
| ------------------------ | --------- |
| 2019-04-05T20:54:13.113Z | true |
Комментарии:
1. Или используйте
localtime
вместоnow()::time