如何通过 ignoring/replacing/trimming 在 CriteriaBuilder 中列值的空格之间从数据库中获取数据
How to fetch data from database by ignoring/replacing/trimming in between spaces of column value in CriteriaBuilder
我找到了如何 trim 尾随和前导白色 space 的字符串,但找不到如何通过替换中间 space 来获取数据。
我在 table X
中有一个列 1
。在 1
列中,我有两个值:"abcd"
和 "ab cd"
。我想通过将 "abcd"
作为搜索参数传递给 criteriaBuilder
.
来获取这两个值
我有下面的尾随和前导白色 space,谁能告诉我如何替换 criteriaBuilder
中的所有 space 个字符?
criteriaBuilder.equal(criteriaBuilder.trim(criteriaBuilder.upper(Column 1);
我无法让它完全按照我想要的方式工作,我尝试添加更改并重建并重新启动。
正如问题中所解释的,问题是我有一个 table X
。在那个 table 中,我有一列 1
。在 1
列中,我有两个值:"abcd"
和 "ab cd"
。我想通过将 "abcd"
作为搜索参数传递给 criteriaBuilder
.
来获取这两个值
我有以下用于前导和尾随白色 space 的代码,但它不适用于 "ab cd"
,白色 space 不在字符串的边缘。
基本上我想比较输入和数据库列值之间的字符串(替换为 space):
criteriaBuilder.equal(criteriaBuilder.trim(criteriaBuilder.upper(Column 1);
我将其替换为
Predicate postCodePredicate = criteriaBuilder.like(criteriaBuilder.upper(criteriaBuilder.function("REPLACE", String.class, criteriaBuilder.upper(addJoin.get("Code")) , criteriaBuilder.literal(" ") , criteriaBuilder.literal(""))) , "%" + pCode(filter.getCode()).toUpperCase().replace(" ", "") + "%" );
如
中所建议
基本上它使用函数 criteriaBuilder
和 "REPLACE"
criteriaBuilder.function("REPLACE",
String.class,
criteriaBuilder.upper(addJoin.get("Code")) ,
//Expression above
criteriaBuilder.literal(" ") ,
criteriaBuilder.literal(""))) ,
"%" + pCode(filter.getCode()).toUpperCase().replace("
", "") + "%" ) //pCode(filter.getCode() is //your input search param
我使用以下参数调用函数
public <T> Expression<T> function(String name, Class<T> returnType, Expression... arguments) {
return new ParameterizedFunctionExpression(this, returnType, name, arguments);
}
如果你不想要 criteriaBuilder.like
,你也可以使用 criteriaBuilder.equal
,如下所示,只需删除 "%"
Predicate postCodePredicate = criteriaBuilder.like(criteriaBuilder.upper(criteriaBuilder.function("REPLACE", String.class, criteriaBuilder.upper(addJoin.get("Code")) , criteriaBuilder.literal(" ") , criteriaBuilder.literal(""))) , pCode(filter.getCode()).toUpperCase().replace(" ", "") );
我找到了如何 trim 尾随和前导白色 space 的字符串,但找不到如何通过替换中间 space 来获取数据。
我在 table X
中有一个列 1
。在 1
列中,我有两个值:"abcd"
和 "ab cd"
。我想通过将 "abcd"
作为搜索参数传递给 criteriaBuilder
.
我有下面的尾随和前导白色 space,谁能告诉我如何替换 criteriaBuilder
中的所有 space 个字符?
criteriaBuilder.equal(criteriaBuilder.trim(criteriaBuilder.upper(Column 1);
我无法让它完全按照我想要的方式工作,我尝试添加更改并重建并重新启动。
正如问题中所解释的,问题是我有一个 table X
。在那个 table 中,我有一列 1
。在 1
列中,我有两个值:"abcd"
和 "ab cd"
。我想通过将 "abcd"
作为搜索参数传递给 criteriaBuilder
.
我有以下用于前导和尾随白色 space 的代码,但它不适用于 "ab cd"
,白色 space 不在字符串的边缘。
基本上我想比较输入和数据库列值之间的字符串(替换为 space):
criteriaBuilder.equal(criteriaBuilder.trim(criteriaBuilder.upper(Column 1);
我将其替换为
Predicate postCodePredicate = criteriaBuilder.like(criteriaBuilder.upper(criteriaBuilder.function("REPLACE", String.class, criteriaBuilder.upper(addJoin.get("Code")) , criteriaBuilder.literal(" ") , criteriaBuilder.literal(""))) , "%" + pCode(filter.getCode()).toUpperCase().replace(" ", "") + "%" );
如
基本上它使用函数 criteriaBuilder
和 "REPLACE"
criteriaBuilder.function("REPLACE",
String.class,
criteriaBuilder.upper(addJoin.get("Code")) ,
//Expression above
criteriaBuilder.literal(" ") ,
criteriaBuilder.literal(""))) ,
"%" + pCode(filter.getCode()).toUpperCase().replace("
", "") + "%" ) //pCode(filter.getCode() is //your input search param
我使用以下参数调用函数
public <T> Expression<T> function(String name, Class<T> returnType, Expression... arguments) {
return new ParameterizedFunctionExpression(this, returnType, name, arguments);
}
如果你不想要 criteriaBuilder.like
,你也可以使用 criteriaBuilder.equal
,如下所示,只需删除 "%"
Predicate postCodePredicate = criteriaBuilder.like(criteriaBuilder.upper(criteriaBuilder.function("REPLACE", String.class, criteriaBuilder.upper(addJoin.get("Code")) , criteriaBuilder.literal(" ") , criteriaBuilder.literal(""))) , pCode(filter.getCode()).toUpperCase().replace(" ", "") );