使用 PSQL 9.2+,您可以使用Range 类型和Range 函数和运算符
tl;博士;
select * from digits_table where digits <@ int4range(0, 40, '(]');
长版
考虑这张表:
postgres=# select * from tests;
id | digit
----+-------
1 | 10
2 | 20
3 | 30
4 | 40
您可以查询(注意这里的 int4range 下限是包含的,而上限是独占的):
postgres=# select * from tests where digit <@ int4range(20,40);
id | digit
----+-------
2 | 20
3 | 30
当然,您可以将字符串转换为所需的输入/排除模式(只需像通常在数学课上所做的那样将其放下,然后转换为范围类型):
postgres=# select * from tests where digit <@ '(20,40]'::int4range;
id | digit
----+-------
3 | 30
4 | 40
postgres=# select * from tests where digit <@ '[20,40]'::int4range;
id | digit
----+-------
2 | 20
3 | 30
4 | 40
有一种更简单但更明确的方式来控制边界(这是 PostgreSQL,宝贝!):
postgres=# select * from tests where digit <@ int4range(20,40,'[]');
id | digit
----+-------
2 | 20
3 | 30
4 | 40
postgres=# select * from tests where digit <@ int4range(20,40,'()');
id | digit
----+-------
3 | 30
postgres=# select * from tests where digit <@ int4range(20,40,'[)');
id | digit
----+-------
2 | 20
3 | 30