按一个条件过滤多列 Postgresql

Cas*_*sie 1 sql postgresql

我在 Postgresql 表中有多个相同类型的字段,即 bigint。我想选择 int 范围内的值 (-2147483647, 2147483647)。我试图做这样的事情,但有多个领域,它看起来并不好:

select * from test_table
where field1 between -2147483647 and 2147483647  
  and field2 between -2147483647 and 2147483647  
  and field3 between -2147483647 and 2147483647
Run Code Online (Sandbox Code Playgroud)

如何对多列应用一个范围过滤?

小智 6

您可以int8range结合使用范围运算符和字段值数组:

SELECT *
FROM test_table
WHERE int8range(-2147483647, 2147483647) @> ANY(ARRAY[field1, field2, field3])
Run Code Online (Sandbox Code Playgroud)