3

「=」記号は誰もが知っています。

SELECT * FROM mytable WHERE column1 = column2;

しかし、column1 と column2 の内容が異なっていて、非常に似ている場合はどうすればよいでしょうか? (おそらくスペースがずれているか、別の単語が含まれている可能性があります)。

次のことは可能ですか。

SELECT * FROM mytable WHERE ....column matches column2 with .4523423 "Score"...

これはあいまい一致と呼ばれると思いますか?それともパターンマッチング?それはそれの専門用語です。

編集:Soundex と Levenstein disatance については知っています。それはあなたが推奨するものですか?

4

2 に答える 2

5

あなたが探しているのは、レーベンスタイン距離と呼ばれるものです。2 つの文字列の違いを示す数値が得られます。

MySQL では、そのためのストアド プロシージャを作成する必要があります。ここに役立つ記事があります。

于 2009-10-15T19:18:34.647 に答える
0

Lukasz Lysik は、データベース内からあいまい一致を実行できるストアド プロシージャへの参照を投稿しました。これを継続的なタスクとして実行したい場合は、それが最善の策です。

しかし、これを 1 回限りのタスクとして実行したい場合や、複雑なチェックを実行したい場合、またはあいまい一致をクリーンアップするために複雑なことを実行したい場合は、Python 内からあいまい一致を実行することをお勧めします。 . (あなたのタグの 1 つが「python」なので、Python ソリューションを受け入れていると思います...)

Python ORM を使用すると、データベース行ごとに 1 つのオブジェクトを含む Python リストを取得し、Python の全機能を使用してデータを分析できます。正規表現、Python Levenstein 関数、その他何でも使用できます。

Python の万能の最適な ORM は、おそらくSQLAlchemyです。私は実際にはDjangoの ORMの方が少し好きです。それはもう少し単純で、私は単純さを大切にしています。ORM のニーズが複雑でない場合は、Django ORM が適しているかもしれません。疑問がある場合は、SQLAlchemy にアクセスしてください。

幸運を!

于 2009-10-15T19:28:19.073 に答える