使用like进行SQL搜索

使用like进行SQL搜索,sql,Sql,一、 我正在尝试对此表进行查询,该表包含以下列 从,到,范围,值如下 1, 100, A: 101,200, B: 201,300, C: 列是整数 一个用户要给出一个数字,我必须知道这个数字是多少。比如说,用户发送了105,我知道通过查询可以得到它在范围B上。但问题是,有时用户不知道要发送的完整号码。假设他们只知道数字的前两位,大约10。我必须返回所有可能涉及l0的可能性。比如说,10-101-1001-10001。问题是,如果我像一样使用,我将不会收到所有的值,因为我在一列中没有这些

一、 我正在尝试对此表进行查询,该表包含以下列

范围
,值如下

1,  100, A: 
101,200, B: 
201,300, C:
列是整数

一个用户要给出一个数字,我必须知道这个数字是多少。比如说,用户发送了
105
,我知道通过查询可以得到它在范围
B
上。但问题是,有时用户不知道要发送的完整号码。假设他们只知道数字的前两位,大约10。我必须返回所有可能涉及
l0
的可能性。比如说,10-101-1001-10001。问题是,如果我像一样使用
,我将不会收到所有的值,因为我在一列中没有这些值

你知道我该怎么做吗

仅针对您的情况(给出前两个数字),您可以使用
substr
选择FROM的前两个数字以及to(length(to | |“”)-length(FROM | |“”)+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)
由于输入为12,这些范围将返回:1-100101-2001101-12001201-1300


当然,如果给定的数字在中间,这是行不通的。

用户可以选择只从一个数字中间发送最后一个数字或数字吗?你需要缩小一点。你不可能期望返回所有涉及10的可能性,因为那是无限的。此外,如果不将要查找的值存储在列中,如何将它们与范围关联?或者所有范围都只是100块?如果是这样的话,跳过SQL查询,只需想出一个算法来计算范围。它只是从您发送的字符开始的吗?在任何情况下,如果将列转换为varchar,则可以像使用
一样使用
。在您的示例中,
如“10%”
将与“10”、“101”等匹配。
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
...................