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 文本字段 ILIKE 'value%';    
  2. 使用正则表达式运算符(请参阅文档中的函数和运算符):

    SELECT * FROM sometable WHERE textfield ~* 'value';
  3. 在比较之前使用 UPPER() 或 LOWER() 更改字段的大小写;这种方法可能比 1) 或 2) 更好,因为这些函数可能会被索引,因此如果您正在执行“开始于”或“完全匹配”搜索,您的查询可能会被索引:

    SELECT * FROM sometable WHERE UPPER(textfield) LIKE (UPPER('value') || '%');
  4. 如果您的大多数搜索是对大型文本字段的“字段中的任何位置”搜索,我建议您查看 PostgreSQL 中可用的两个“全文搜索”工具,一个在您的源代码的 /contrib 中,第二个来自 openFTS。组织。

这是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 回答