МЕЖДУ предложением, возвращающим неправильный результат

#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 предположению, не приведет к возвращению результатов, например, am AND , которое меньше BETWEEN . Вы можете войти в систему с внешнего интерфейса или запустить регистрацию в журнале Postgresq, чтобы увидеть, что на самом деле попадает в базу данных.

4. @AdrianKlaver этот запрос я вручную написал на своей консоли и попробовал, он не работает. Это данные, поступающие к нему!

5. Работает на меня. Похоже, что у вас нет ценностей, которые находятся между этими двумя временами, так что вам нечего искать.