有没有一种方法可以测试一个表格中两个属性给出的区间是否与另一个属于“硬编码”的区域相交?假设我们有一张桌子相交两个区间
a | b
2 | 3
4 | 6
1 | 2
其中两个属性标记一个区间。现在我想要得到所有相交的间隔,例如{3, 5}
(现在我们称这两个数字较低(l
) - 较高(u
))。这应该导致{{3}, {4, 5}}
。
我已经想到了办法建立一个巨大的SQL查询,检查为以下四种情况要返回的每一行:
a >= l && b <= u // attribute-given interval completely enclosed by bounds
a <= l && b <= u // attribute-given interval falls out to "the left"
a >= l && b >= u // attribute-given interval falls out to "the right"
a <= l && b >= u // bounds are completely enclosed by attribute-given interval
但是我使用任何内建想知道,如果看到一只聪明的做法在功能二中执行这样的交集。
我为此使用Oracle 11g。
哇,这是很快的速度......不得不验证它,但对于我的第一次测试,它似乎相当不错。我怎样才能解决这个问题:上限和下限都被修复了,以致于在这些界限上产生了间隔?为了我的意思,请参阅我的“{{3},{4,5}}”的例子。 – HimBromBeere
@HimBromBeere当区间相交时,交点可以作为一对'(GREATEST(a,l),LEAST(b,u))'找到。对于你的'(3,5)'和匹配行'(4,6)'的例子,'GREATEST'将返回'4',并且'LEAST'将返回'5',给你的'(4,5)结果。对于触摸区间'(2,3)','LEAST'和'GREATEST'都会返回'3'。 – dasblinkenlight
我认为'{3,5}'也会从第一个时间间隔('{2,3}')匹配'3'。 – HimBromBeere