我有一个数据库,列出了一些区号,区号+办公室代码以及一些整数和动作。我希望它通过给出的数字返回结果,但我不知道如何完成它。我有一些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语句以区分234XXXXXXX
和234843XXXX
的匹配项,因为我只能有一场比赛回归。基本上如果它不匹配10位数,那么它检查6位数,然后它将检查3位数。
我希望这是有道理的,我没有任何其他方式来格式化数字,只需要一个SQL查询即可完成,并通过Asterisk中的ODCB连接返回。
答案 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();