#postgresql
#postgresql
Вопрос:
Когда я пытаюсь
select "leads".* from "leads" where ("leads"."completed" in (true)) and ("leads"."status" in ('active')) and ( leads.created_at between COALESCE('2021-12-01 03:00:00.000'::timestamptz, '-infinity') and COALESCE('2021-12-02 03:59:59.999'::timestamptz, 'infinity') ) order by GREATEST(leads.created_at, leads.requalified_at) DESC , "leads"."id" asc limit 41;
Это ничего не возвращает
Но
leads.created_at gt;= COALESCE('2021-12-01 03:00:00.000'::timestamptz, '-infinity')
работает отлично. Я ожидал, что предложение between вернет результат между 2 датами, но этого не произошло. Что я делаю не так?
Комментарии:
1.
COALESCE('2021-12-01 03:00:00.000'::timestamptz, '-infinity')
не имеет никакого смысла, поскольку это никогда не решится'-infinity'
. В фактическом запросе используется значение поля?2. @AdrianKlaver да, он использует значение поля, динамическую переменную, поступающую из интерфейса, которая может быть преобразована в NULL, и я возвращаюсь в бесконечность, чтобы получить более широкий диапазон
3. Затем вам нужно найти, какие значения на самом деле попадают в запрос. Прямо сейчас значение, которое не
NULL
соответствует, но не соответствует вашемуBETWEEN
предположению, не приведет к возвращению результатов, например, amAND
, которое меньшеBETWEEN
. Вы можете войти в систему с внешнего интерфейса или запустить регистрацию в журнале Postgresq, чтобы увидеть, что на самом деле попадает в базу данных.4. @AdrianKlaver этот запрос я вручную написал на своей консоли и попробовал, он не работает. Это данные, поступающие к нему!
5. Работает на меня. Похоже, что у вас нет ценностей, которые находятся между этими двумя временами, так что вам нечего искать.