【问题标题】:How to fetch data from database by ignoring/replacing/trimming in between spaces of column value in CriteriaBuilder如何通过在 CriteriaBuilder 中的列值空格之间忽略/替换/修剪来从数据库中获取数据
【发布时间】:2020-07-19 14:10:23
【问题描述】:

我发现了如何从字符串中修剪尾随和前导空格,但找不到如何通过替换中间空格来获取数据。

我在表X 中有一个列1。在1 列中,我有两个值:"abcd""ab cd"。我想通过将"abcd" 作为搜索参数传递给criteriaBuilder 来获取这两个值。

我有下面的尾随和前导空格,谁能告诉我如何替换 criteriaBuilder 中的所有空格字符?

criteriaBuilder.equal(criteriaBuilder.trim(criteriaBuilder.upper(Column 1);

我无法让它完全按照我想要的方式工作,我尝试添加更改并重建并重新启动。

【问题讨论】:

  • criteriaBuilder.like(criteriaBuilder.upper(criteriaBuilder.function("REPLACE", String.class,criteriaBuilder.upper(addJoin.get("Code")),criteriaBuilder.literal(""), criteriaBuilder.literal(""))) , "%" + pCode(filter.getCode()).toUpperCase().replace(" ", "") + "%" );
  • 以上对我有用。谢谢你们

标签: oracle hibernate jpa jpql


【解决方案1】:

问题是,正如问题中所解释的,我有一张桌子X。在该表中,我有一列1。在1 列中,我有两个值:"abcd""ab cd"。我想通过将"abcd" 作为搜索参数传递给criteriaBuilder 来获取这两个值。

我有以下用于前导和尾随空格的代码,但它不适用于"ab cd",因为空格不在字符串的边缘。

基本上我想比较输入和数据库列值之间的字符串(替换为空格):

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(" ",   "") + "%" ); 

jpa criteria compare two strings in without considering spaces建议的那样

基本上它使用函数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(" ",   "") ); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多