0

SQL 要求で 2 つの文字列を比較して、最適な一致を取得できるようにしたくありません。目的は、オペレーターに可能な限り最適な郵便番号を提案することです。たとえば、フランスでは整数の郵便番号があるため、簡単なリクエストを作成しました。

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

このリクエストは、パリに最も近いデータを最初に返します。

残念ながら、イギリスにはAB421RSのような郵便番号があり、私のリクエストではそれができません. SQL Server で関数 'Difference' が表示されます: http://www.java2s.com/Code/SQLServer/String-Functions/DIFFERENCEworkoutwhenonestringsoundssimilartoanotherstring.htm

しかし、私はMySQLを使用しています..

1 つの簡単な要求でトリックを実行する良いアイデアを持っている人はいますか?

PS:レーベンシュタイン距離はそれを行いません。文字列を数値のように比較したくないからです。ABCDEF は、ZBCDEF よりも AWXYZ に近づける必要があります。

4

1 に答える 1

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
于 2010-06-18T15:50:22.017 に答える