我在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;