Добавить нули в диапазон bigint PostgreSQL - PullRequest
0 голосов
/ 29 апреля 2020

Я фильтрую значения, лежащие в диапазоне bigint, используя запрос SQL в PostgreSQL. Проблема в том, что значение NULL не находится в этом диапазоне, поэтому все значения NULL также фильтруются, а это не то, что я хотел бы иметь в системе. Вот текущий запрос:

select *
from table_test
where '[0,2147483647]'::int8range @> ALL(ARRAY[field1, field2, field3])

Ввод:

field1 field2 field3
  1     null   null
  2     null    3  
  3     1000    19
  4      63    3623511495

Токовый вывод:

field1 field2 field3
  3     1000    19

Ожидаемый вывод:

  1     null   null
  2     null    3  
  3     1000    19

Как я могу добавить нулевое возможное значение в диапазон bigint?

1 Ответ

0 голосов
/ 29 апреля 2020

Вы можете просто использовать

SELECT *
FROM table_test
WHERE '[0,2147483647]'::int8range
      @> ALL(ARRAY[coalesce(field1, 0),
                   coalesce(field2, 0),
                   coalesce(field3, 0)]);

, как говорится в комментарии Гордона Линоффа.

Менее мило, но легче поддерживать с индексами было бы

SELECT *
FROM table_test
WHERE coalesce(field1, 0) BETWEEN 0 AND 2147483647
  AND coalesce(field2, 0) BETWEEN 0 AND 2147483647
  AND coalesce(field3, 0) BETWEEN 0 AND 2147483647;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...