MySQL 仅在给出完整号码时才匹配区号

MySQL match area code only when given the full number

我有一个数据库,其中列出了一些区号、区号 + 办公室代码和一些整数以及一个动作。我希望它 return 由给定的数字得到结果,但我不确定如何完成它。我有一些 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语句来区分[=15=的匹配] 和 234843XXXX,因为我只能匹配一个 return。基本上如果它不匹配 10 位数字,那么它会检查 6 位数字,然后它会检查 3 位数字。

我希望这是有道理的,我没有任何其他方法来格式化数字,它必须通过 Asterisk 中的 ODCB 连接仅通过一个 SQL 查询和 return 来完成.

试试这个

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