2

Oracle にはtranslate、文字列の個々の文字を他の文字と同じ順序で置き換えるために使用できる関数があります。replaceこれは、2 番目の引数全体を 3 番目の引数全体で置き換える関数とは異なります。

translate('1tech23', '123', '456');     --would return '4tech56'
translate('222tech', '2ec', '3it');     --would return '333tith'

クエリ文字列のアクセント (ブラジルのポルトガル語) を無視して SQLite データベースで検索を実装するには、これが必要です。クエリされるテーブル内のデータには、アクセントが付いている場合とない場合があるため、ユーザーがクエリ文字列をどのように入力するかによって、結果が異なります。

例: 「maçã」を検索する場合、ユーザーは「maca」、「maça」、「macã」、または「maçã」と入力できます。テーブル内のデータも 4 つの可能性のいずれかになります。オラクルを使用すると、これのみを使用します。

Select Name, Id 
  From Fruits 
 Where Translate(Name, 'ãç','ac') = Translate(:QueryString, 'ãç','ac')

...およびこれらの他の文字置換:

áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙãõÃÕäëïöüÄËÏÖÜâêîôûÂÊÎÔÛñÑçÇ

に:

aeiouAEIOUaeiouAEIOUaoAOaeiouAEIOUaeiouAEIOUnNcC

もちろん、Replace の呼び出しをいくつか入れ子にすることもできますが、これは適切な選択ではありません。

事前に助けてくれてありがとう。

4

3 に答える 3

3

SQLite 用のオープンソースの Oracle 関数は、カンザス州立大学で作成されています。これらには translate() (ちなみに完全な UTF-8 サポート) が含まれており、ここで見つけることができます。

于 2015-09-08T13:40:22.523 に答える
2

あなたが説明したように、1回のパスでテキストを翻訳するsqliteには何もないと思います。

ただし、これをユーザー定義関数として実装することは難しくありません。これはまともな開始リファレンスです。

于 2012-12-19T19:06:51.897 に答える