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 の呼び出しをいくつか入れ子にすることもできますが、これは適切な選択ではありません。
事前に助けてくれてありがとう。