我正在开发一个应用程序,在其中的一部分我得到一个字符串作为电话号码,我必须返回该号码的电话提供商,在数据库中我有这个结构的表前缀:
id , name, code
其中的一些数据如下:
(23242, 'UK-Mobile-T Mobile', '447984'),
(23243, 'UK-Mobile-T Mobile', '447985'),
(23244, 'UK-Mobile-T Mobile', '447986'),
(23245, 'UK-Mobile-T Mobile', '447987'),
(23246, 'UK-Mobile-Vodafone', '447407'),
(23247, 'UK-Mobile-Vodafone', '447423'),
name是提供者,代码是属于该提供者的前缀
我输入的是一个电话号码,就像447243xxxxx
问题是这样的: 当给出上述输入时,我应该如何创建一个返回UK-Mobile-Vodafone的查询?
请记住,此代码的长度对于每个国家/地区都不相同
答案 0 :(得分:1)
这可能对您有用:
select t.*
from table t
where '447243xxxxx' like concat(t.code, '%');
除其他外,这假设只有一个前缀匹配每个数字。否则你需要在他们中间做出选择。
如果您需要在它们中进行选择,通常您需要最长的匹配项:
select t.*
from table t
where '447243xxxxx' like concat(t.code, '%')
order by length(t.code) desc
limit 1;
然后,如果您希望能够使用索引,则不希望在concat()
上使用code
。相反,提取前n个字符。如果所有长度(6)与示例中的相同,则很容易:
select t.*
from table t
where left('447243xxxxx', 6) = t.code;
答案 1 :(得分:0)
只需将LIKE-operator与GROUP BY一起使用:
SELECT NAME FROM TBL_TABLENAME WHERE CODE LIKE '447243%' group by NAME;