首页 > 解决方案 > 数组包含空值 PostgreSQL

问题描述

我在 PostgreSQL 中有 SQL 查询,它以数组的形式过滤特定字段,以便在 bigint 范围内。我想增加不过滤掉空值的可能性。使用现有查询,过滤掉所有字段的空值:

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

我想做这样的事情,只有在这里我检查整个数组,而我想检查每个字段:

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

另外,我不想检查每个字段是否为空,而是我想检查整个字段数组的空值。我将字段名称(如一个字符串)传递给查询(称为字段),这就是我不想单独检查每个字段的原因。创建这样的实现是为了对多个表进行更通用的查询。

如何修复此查询?

标签: sqlpostgresql

解决方案


我想增加不过滤掉空值的可能性。

基于此,我希望逻辑如下:

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或其中任何一个。以上内容适用于所有人。如果需要,请将 s 更改andors。


推荐阅读