将null添加到PostgreSQL的bigint范围中



我在PostgreSQL中使用SQL查询过滤bigint范围内的值。问题是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

如何将null作为可能的值添加到bigint的范围中?

您可以简单地使用

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

正如Gordon Linoff的评论所说。

不那么可爱,但更容易支持索引

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;

最新更新