2010-06-18 113 views
0

我不想在SQL請求中比較兩個字符串,因此我可以檢索最佳匹配,目的是向操作員建議可能的最佳郵政編碼。 例如,在法國,我們有整數郵編,所以我做了一個簡單的要求:將兩個字符串與MySQL進行比較

SELECT * 
FROM myTable 
ORDER BY abs(zip_code - 75000) 

這個請求首先返回最近巴黎的數據。

不幸的是,英國有郵編像AB421RS,所以我的要求不能這樣做。 我看到在SQL Server中的功能「差異」:http://www.java2s.com/Code/SQLServer/String-Functions/DIFFERENCEworkoutwhenonestringsoundssimilartoanotherstring.htm

但我使用MySQL ..

是否有任何人誰擁有一個好主意,這樣的伎倆在一個簡單的請求?

PS:Levenshtein距離不會這樣做,因爲我真的不想比較字符串,就像它們是數字一樣。 ABCDEF必須靠近AWXYZ而不是ZBCDEF。

回答

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 
相關問題