如何在postgreSql中查询复杂范围

时间:2017-11-12 10:27:42

标签: sql postgresql

我的一个postgreSQL表中有两列。

列的名称是:TO,FROM 表示范围。假设100 - 200(所以这里100将保存在TO中,200将保存在FROM中)

现在,主要问题是此范围内的任何数字都将永远不会再次使用。即我们无法保存(根据上述例子,100,101,102 ... 200)。

我必须创建一个查询,我必须从请求中获取数据并检查请求的范围是否在数据库中。

示例:100 -200已经保存在数据库中,我收到以下请求: 1)100 -200 2)150-250 3)20 -150 4)50 -280 等等... 以上所有情况都是错误的,因为至少有一个数字已保存在db

我是SQL的新手你可以帮忙查询吗?我正在使用postgreSQL。

2 个答案:

答案 0 :(得分:1)

SELECT * FROM TABLE_NAME WHERE 
(dateFrom <= Req.from AND dateTo >= Req.from)OR
(dateFrom <= Req.to AND dateTo >= Req.to) OR
(dateFrom >= Req.from AND dateTo <= Req.to)

我没有找到比这更好的

答案 1 :(得分:0)

Postgres有range functions。你看看了吗?因此,您可以使用重叠运算符来检查范围是否重叠。

int8range(3,7) && int8range(4,12)