有沒有一種方法可以測試一個表格中兩個屬性給出的區間是否與另一個屬於「硬編碼」的區域相交?假設我們有一張桌子相交兩個區間
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