【发布时间】:2016-03-27 07:07:20
【问题描述】:
Grails 版本:3.0.7
Groovy 版本:2.4.4
JVM 版本:1.8.0_51
我在 grails 服务中有以下查询,我的问题是如何“忽略”字段值(如邮政编码)中间的空白。
例如,期望的结果是“LL551RB”将匹配数据库中保存的“LL55 1RB”的like 子句。相反,解决方案很简单,从查询值中去除空格,但我无法确定如何从数据库值中去除空格。
我尝试了以下变体,虽然它们执行时不正确匹配。
def allRecordsMatched = Event.createCriteria().listDistinct {
or {
eventCategories {
like("categoryName", "%" + search + "%")
}
like("eventName", "%" + search + "%")
like("address.town", "%" + search + "%")
like("address.county", "%" + search + "%")
like("address.postalCode".replaceAll("\\s",""), "%" + search + "%")
}
order("startDateTime", "asc")
}
return [results, allRecordsMatched]
【问题讨论】:
-
您可以在 hql 中重写它并在其中使用 TRIM(FIELD) 函数(不确定它在 hql 中是否有效,但在 sql 中有效。
-
您应该在保存邮政编码之前或通过后台作业去除不需要的空格。所有其他方法都会导致查询更复杂,搜索性能更差
-
@injecteer 好点。我已经删除了数据库中现有条目中的空格,并在域类上实现了一个设置器来删除任何空格并将字母转换为大写。
标签: hibernate grails grails-orm grails-3.0