0

休止状態で大文字と小文字を区別しないフィルタリングに LIKE 式を使用するにはどうすればよいですか?

私の休止状態ファイルの対応するエントリは次のとおりです。

<filter name="applicantNameFilter" condition="first_name LIKE :nameFilter"/>
4

2 に答える 2

4

これを試して

<filter name="applicantNameFilter" condition="first_name ILIKE :nameFilter"/>

また

<filter name="applicantNameFilter" condition="UPPER(first_name) LIKE UPPER(:nameFilter)"/>

参考のために

  1. ILIKEの使用:

    SELECT * FROM sometable WHERE textfield ILIKE'value%';    
  2. 正規表現演算子の使用(ドキュメントの関数と演算子を参照):

    SELECT * FROM sometable WHERE textfield〜*'value';
  3. UPPER()またはLOWER()を使用して、比較前にフィールドの大文字と小文字を変更します。このアプローチは、1)または2)よりも優れている可能性があります。これは、これらの関数にインデックスが付けられる可能性があるためです。したがって、「begins with」または「完全一致」検索を実行している場合は、クエリにインデックスが付けられる可能性があります。

    SELECT * FROM sometable WHERE UPPER(textfield)LIKE(UPPER('value')||'%');
  4. ほとんどの検索が大きなテキストフィールドでの「フィールド内のどこでも」検索である場合、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();
于 2012-07-17T09:24:12.027 に答える
1

~*の代わりに使用してみてくださいLIKE。前者は大文字と小文字を区別しないパターンマッチングを行います(そしてPostgreSQL固有です)。

詳細については、マニュアルを参照してください:http ://www.postgresql.org/docs/9.1/static/functions-matching.html#FUNCTIONS-POSIX-TABLE

于 2012-07-17T08:56:02.753 に答える