MySQL只有在给定完整数字时才匹配区号



我有一个数据库,列出了一些区号、区号+办公室代码以及一些整数和一个操作。我希望它返回给定数字的结果,但我不确定如何完成。我有一些MySQL知识,但不是很深入。

这里有一个例子:

match     | action
_____________________
234       | goto 1
333743    | goto 2
8005551212| goto 3
234843    | goto 4

我需要用一个完整的10位数字查询数据库

query 8005551212 gives "goto 3"
query 2345551212 gives "goto 1"
query 3337431212 gives "goto 2"
query 2348431212 gives "goto 4"

这将类似于LIKE选择,但我需要与数据库值而不是查询值匹配。匹配完整号码很容易,

SELECT * FROM database WHERE `match` = 8005551212;

首先,要查询的数字总是10位,所以我不知道如何格式化SELECT语句来区分234XXXXXXX234843XXXX的匹配,因为我只能返回一个匹配。基本上,如果它与10位数字不匹配,那么它会检查6位数字,然后它会检查3位数字。

我希望这是有意义的,我没有任何其他方法来格式化数字,而且它必须通过Asterisk中的ODCB连接通过一个SQL查询和返回来完成。

试试这个

SELECT match, action FROM mytable WHERE '8005551212' like concat(match,'%')

问题是,你会在一个案例中得到两行。。根据您的数据。。

SELECT action 
FROM mytable 
WHERE '8005551212' like concat(match,'%')
order by length(match) desc limit 1

这应该得到匹配数字最多的行。。

试试这个:

SELECT * FROM (
  SELECT 3 AS score,r.* FROM mytable r WHERE match LIKE CONCAT(SUBSTRING('1234567890',1,3),'%') 
  UNION ALL
  SELECT 6 AS score,r.* FROM mytable r WHERE match LIKE CONCAT(SUBSTRING('1234567890',1,6),'%') 
  UNION ALL
  SELECT 10 AS score,r.* FROM mytable r WHERE match LIKE CONCAT(SUBSTRING('1234567890',1,10),'%')
) AS tmp
ORDER BY score DESC
LIMIT 1;

什么最终起作用-

SELECT `function`,`destination`
FROM reroute
WHERE `group` = '${ARG2}'
  AND `name` = 0
  AND '${ARG1}' LIKE concat(`match`,'%')
ORDER BY length(`match`) DESC LIMIT 1

相关内容

  • 没有找到相关文章

最新更新