我不想在SQL请求中比较两个字符串,因此我可以检索最佳匹配,目的是向操作员提出可能的最佳邮政编码。 例如,在法国,我们有Integer Zip代码,所以我提出了一个简单的请求:
SELECT *
FROM myTable
ORDER BY abs(zip_code - 75000)
此请求首先返回离巴黎最近的数据。
不幸的是,英国有像AB421RS这样的邮政编码,所以我的请求无法做到。 我在SQL Server中看到一个函数'Difference':http://www.java2s.com/Code/SQLServer/String-Functions/DIFFERENCEworkoutwhenonestringsoundssimilartoanotherstring.htm
但我使用MySQL ..
有没有人有一个好主意在一个简单的请求中做这个技巧?
PS:Levenshtein Distance不会这样做,因为我真的不想比较字符串,如果它们是数字。 ABCDEF必须更接近AWXYZ而不是ZBCDEF。
答案 0 :(得分:2)
好的,我必须停止提问并在!!之后找到答案。
对于社区,我将会做的是:
select *
from myTable
order by abs(ascii(substring(zip_code,1,1)) - ascii(substring('AAAAA',1,1))) asc,
abs(ascii(substring(zip_code,2,1)) - ascii(substring('AAAAA',2,1))) asc,
abs(ascii(substring(zip_code,3,1)) - ascii(substring('AAAAA',3,1))) asc,
abs(ascii(substring(zip_code,4,1)) - ascii(substring('AAAAA',4,1))) asc,
abs(ascii(substring(zip_code,5,1)) - ascii(substring('AAAAA',5,1))) asc