休止状態で大文字と小文字を区別しないフィルタリングに LIKE 式を使用するにはどうすればよいですか?
私の休止状態ファイルの対応するエントリは次のとおりです。
<filter name="applicantNameFilter" condition="first_name LIKE :nameFilter"/>
これを試して
<filter name="applicantNameFilter" condition="first_name ILIKE :nameFilter"/>
また
<filter name="applicantNameFilter" condition="UPPER(first_name) LIKE UPPER(:nameFilter)"/>
参考のために
ILIKEの使用:
SELECT * FROM sometable WHERE textfield ILIKE'value%';
正規表現演算子の使用(ドキュメントの関数と演算子を参照):
SELECT * FROM sometable WHERE textfield〜*'value';
UPPER()またはLOWER()を使用して、比較前にフィールドの大文字と小文字を変更します。このアプローチは、1)または2)よりも優れている可能性があります。これは、これらの関数にインデックスが付けられる可能性があるためです。したがって、「begins with」または「完全一致」検索を実行している場合は、クエリにインデックスが付けられる可能性があります。
SELECT * FROM sometable WHERE UPPER(textfield)LIKE(UPPER('value')||'%');
ほとんどの検索が大きなテキストフィールドでの「フィールド内のどこでも」検索である場合、PostgreSQLで利用可能な2つの「全文検索」ツールを確認することをお勧めします。1つはソースの/ contribにあり、もう1つはopenFTSからのものです。 org。
これはJavaコードです
としてのユーザー基準
Criteria criteria = getSession().createCriteria(Person.class);
criteria.add(Restrictions.ilike("first_name", first_name, MatchMode.ANYWHERE));
criteria.list();
~*
の代わりに使用してみてくださいLIKE
。前者は大文字と小文字を区別しないパターンマッチングを行います(そしてPostgreSQL固有です)。
詳細については、マニュアルを参照してください:http ://www.postgresql.org/docs/9.1/static/functions-matching.html#FUNCTIONS-POSIX-TABLE