Сравните две строки с MySQL - PullRequest
0 голосов
/ 18 июня 2010

Я не хочу сравнивать две строки в запросе SQL, чтобы получить лучшее совпадение, цель - предложить оператору наилучший возможный почтовый индекс. Например, во Франции у нас есть целочисленный почтовый индекс, поэтому я сделал простой запрос:

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

Этот запрос возвращает сначала данные, наиболее близкие к Парижу.

К сожалению, в Великобритании есть почтовый индекс, такой как AB421RS, поэтому моя просьба не может это сделать. Я вижу в SQL Server функцию «Разница»: http://www.java2s.com/Code/SQLServer/String-Functions/DIFFERENCEworkoutwhenonestringsoundssimilartoanotherstring.htm

Но я использую MySQL ..

Есть ли кто-нибудь, у кого есть хорошая идея сделать трюк одним простым запросом?

PS: расстояние Левенштейна этого не сделает, так как я действительно не хочу сравнивать строки, как если бы они были числом. ABCDEF должен быть ближе к AWXYZ, чем к ZBCDEF.

1 Ответ

2 голосов
/ 18 июня 2010

Хорошо, я должен прекратить задавать вопрос и найти ответ сразу после !!

Для сообщества вот что я сделаю:

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
...