2013-11-27 83 views
0

我試圖對這個表進行查詢,它有以下列。SQL搜索像

fromtoRange與值等

1, 100, A: 
101,200, B: 
201,300, C: 

的列是整數。

用戶打算給一個號碼,我必須得到哪個費率。比方說,用戶發送105,我知道用查詢我可以得到它在範圍B。但問題是,有時用戶不知道將要發送的完整號碼。假設他們只知道數字的前兩位數字,例如10.我必須返回可能涉及l0的所有可能性。比如說,10-101-1001-10001。問題是,如果我使用LIKE,我不會收到所有的值,因爲我沒有列出它們。

任何想法我可以做到這一點?

+0

用戶是否可以選擇只發送*號碼中間的最後一個數字或數字? –

+0

你將需要縮小一點。你不可能期望返回所有涉及10的可能性,因爲這將是無限的。另外,如果您不在某一列中存儲要查找的值,您如何將它們與範圍相關聯?或者是所有的範圍只是100塊?如果是這種情況,請跳過SQL查詢,然後提出一個算法來計算範圍。 –

+0

它只是從你發送的字符開始?在任何情況下,如果您將列轉換爲varchar,則可以使用'LIKE'。在你的例子中,'LIKE '10%''匹配'10','101'等。 – Andrew

回答

0

只爲你的情況(給前兩位),你可以使用substr挑選從對應於(長度(以||「的頭前兩位」) - 長(從||」 「)2)。然後將它們與用戶輸入進行比較以找到範圍。

使用此查詢,您可以獲取包含用戶發送的數字的所有範圍。

的作爲一個例子使用的用戶輸入,結果將是範圍含有數等'12%':

select from, to, range from 
(select Integer(substr(from,1,2)) substr_from, 
     Integer(substr(to,1,length(to||'')-length(from||'')+2) substr_to, 
     from, to, range 
from your_table) 
where (substr_from<=12 and substr_to>=12) 
or (from<=12 and to>=12) 

下面表將顯示的from, to, substr_from, substr_to

1  100 1 100 
101 200 10 20 
201 300 20 30 
................... 
901 1000 90 100 
1001 1100 10 11 
1101 1200 11 12 
................... 
9901 10000 99 100 
10001 10100 10 10 
10101 10200 10 10 
................... 

的值由於輸入是12,這些範圍將被返回:1-100,101-200,1101-1200,1201-1300 ...

當然這不會工作如果給定的數字在中間。