只有在给出完整数字

时间:2015-12-23 20:50:58

标签: mysql odbc asterisk

我有一个数据库,列出了一些区号,区号+办公室代码以及一些整数和动作。我希望它通过给出的数字返回结果,但我不知道如何完成它。我有一些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位数。

我希望这是有道理的,我没有任何其他方式来格式化数字,只需要一个SQL查询即可完成,并通过Asterisk中的ODCB连接返回。

3 个答案:

答案 0 :(得分:0)

试试这个

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

那应该得到匹配最多的行..

答案 1 :(得分:0)

试试这个:

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;

答案 2 :(得分:0)

最终结束了什么 -

string attachment1 = row["Attachment1"].ToString();