Массив содержит нули PostgreSQL - PullRequest
0 голосов
/ 29 апреля 2020

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

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

И я хотел бы сделать что-то подобное, только здесь я проверяю весь массив, в то время как я хотел бы проверять каждое field:

select count(*) from dbm.inventory_source where '[0,2147483647]'::int8range @> ALL(ARRAY[id, exchange_id, min_cpm_micros])
or (array[id, exchange_id, min_cpm_micros]) is null

Кроме того, я не хотел бы проверять каждое поле на пустое значение, вместо этого я хотел бы проверять нулевые значения для всего массива полей. Я передаю имена полей, например одну строку, в запрос (называемые полями), и по этой причине я не хочу проверять каждое поле отдельно. Такая реализация была создана, чтобы иметь больше общих c запросов для нескольких таблиц.

Как я могу исправить этот запрос?

1 Ответ

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

Я хотел бы добавить возможность не отфильтровывать нулевые значения.

Исходя из этого, я ожидаю, что logi c вроде:

where '[0,2147483647]'::int8range @> ALL(ARRAY[field_1, field_2, field_3]) or
      (field_1 is null and field_2 is null and field_3 is null)

Мне неясно, хотите ли вы, чтобы все значения были NULL или любой из них. Выше для всех из них. Если хотите, измените and s на or s.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...