将null添加到bigint范围PostgreSQL

问题描述 投票:0回答:1

我正在使用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的范围?

sql postgresql
1个回答
0
投票

您可以简单地使用

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;
© www.soinside.com 2019 - 2024. All rights reserved.