如何通过 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(" ",   "") );