Postgres ГДЕ предложение с бесконечностью - PullRequest
0 голосов
/ 16 марта 2020

У меня есть следующее предложение WHERE для таблицы x со столбцом 1 в качестве целого числа. SELECT вызывается в функции с параметрами (целое число, целое число b)

Вызов функции:

SELECT * FROM function(0, 10)

Сценарий в функции:

SELECT * FROM tablex x WHERE x.column1 between a and b

Теперь я пропустите результаты, где column1 равно нулю, но в этом случае важно получить их. Зависит от того, кто вызывает функцию. Каким должен быть параметр «а», чтобы также получить нулевые значения. Или есть способ отключить предложение where в зависимости от поступающего параметра?

Ответы [ 3 ]

1 голос
/ 16 марта 2020

Я нашел хорошее решение для этого:

SELECT * FROM tablex x WHERE coalesce(x.column1, 0) between a and b
0 голосов
/ 16 марта 2020

Чтобы значения NULL действовали в качестве фактических значений, инвертирует логи c. [и добавьте комментарий к коду, потому что отрицание может запутать будущих читателей / сопровождающих]:


 SELECT * FROM tablex x WHERE NOT x.column1 < a and NOT x.column1 >= b;

Обратите внимание, что в вышеприведенном предполагается, что вы хотите иметь значения NULL в обоих a и b должны рассматриваться как -inf и +inf соответственно.

0 голосов
/ 16 марта 2020

Добавить лог c для принятия значения null column1:

SELECT *
FROM tablex x
WHERE x.column1 BETWEEN a AND b OR x.column1 IS NULL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...