3

テーブルスキャンが必要ないため(大量のデータがあるため)、Oracleのようなファジー検索とインデックスを使用してDBテーブルを検索する必要があります。

大文字と小文字、言語の特殊なもの (ñ、ß、...)、および _、()、- などの特殊文字を無視したい...

「maria (cool)」を検索すると、「maria-COOL」と「María_Cool」が一致するはずです。
それは何らかの方法でOracleで可能ですか?

ケースについては、インデックスを直接小文字で作成し、常に小文字で検索することで解決できると思います。しかし、特殊文字の問題を解決する方法がわかりません。
特別な文字を含まないデータを別の列に保存し、それを検索して実際のデータを返すことを考えましたが、それが完璧なソリューションである場所が 100% わかりません。

何か案は?

4

1 に答える 1

3

UTL_MATCHが役立つかもしれません。

ただし、次のような関数ベースのインデックスを作成することもできます。

regexp_replace(your_column, '[^0-9a-zA-Z]+', ' ')

そして、次のように一致させてみてください:

...
WHERE regexp_replace(your_column, '[^0-9a-zA-Z]+', ' ') = 
      regexp_replace('maria (cool)' , '[^0-9a-zA-Z]+', ' ')

ここに sqlfiddle デモがあります 完全ではありませんが、開始することができます

于 2013-05-02T11:18:07.900 に答える