SQL搜索与喜欢

时间:2013-11-27 01:43:53

标签: sql

我试图对这个表进行查询,它有以下几列。

fromtoRange,其值为

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

列是整数。

用户打算给出一个号码,我必须得到哪个价格。假设用户发送105,我知道通过查询我可以得到它在范围B上。但问题是,有时用户不知道将要发送的完整号码。假设他们只知道数字的前两位数字,例如10.我必须返回所有可能涉及l0的可能性。比方说,10-101-1001-10001。问题是,如果我使用LIKE,我将无法收到所有值,因为我没有列中的值。

我有什么想法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

仅针对您的情况(给出前两位数字),您可以使用substr选择FROM的前两位数字和TO的相应头部(长度(到||'') )-length(从|| '')+ 2)。然后将它们与用户输入进行比较以找到范围。

使用此查询,您可以获得包含用户发送的数字的所有范围。

使用 12 的用户输入作为示例,结果将包含范围包含'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 ......

当然,如果给定的数字在中间,这将无效。