Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在HQL和MySql数据库中使用TRIM引导函数_Java_Mysql_Hibernate_Hql_Trim - Fatal编程技术网

Java 在HQL和MySql数据库中使用TRIM引导函数

Java 在HQL和MySql数据库中使用TRIM引导函数,java,mysql,hibernate,hql,trim,Java,Mysql,Hibernate,Hql,Trim,我正在数据库上查询,以检查电话号码范围是否相互重叠 有些数字存储为前面有一个“+”字符:+332457896,而另一些数字存储时没有“+”字符:332457897 因此,在进行比较之前,我想删除潜在的前导“+” 我发现MySQL Trim函数在MySQL Workbench中运行良好,甚至与hibernate一起使用本机查询: TRIM(LEADING '+' FROM MyColumn) 但当我尝试使用hibernate HQL查询执行相同操作时,我得到一个错误: org.hibernate

我正在数据库上查询,以检查电话号码范围是否相互重叠

有些数字存储为前面有一个“+”字符:+332457896,而另一些数字存储时没有“+”字符:332457897

因此,在进行比较之前,我想删除潜在的前导“+”

我发现MySQL Trim函数在MySQL Workbench中运行良好,甚至与hibernate一起使用本机查询:

TRIM(LEADING '+' FROM MyColumn)
但当我尝试使用hibernate HQL查询执行相同操作时,我得到一个错误:

org.hibernate.hql.internal.ast.ErrorCounter-预期加入的路径

我猜这与“From”关键字有关

EJB-QL 3.0支持I checked and Trim函数,其语法为:

修剪([前导|尾随|两侧][自]字符串)

编辑:这是我用来执行这个查询的java代码

startNumber和endNumber是我尝试创建的范围的完整电话号码。 我将其与Range表进行检查,通过关联prefix和rangeStart/rangeEnd列,我从中构建现有的rangeStart和rangeEnd编号

public List<Range> findRangeOverlap(String pStartNumber, String pEndNumber) {
    StringBuilder jpaQuerySb = new StringBuilder("SELECT p FROM MyTable p ");

    // Overlap restriction
    // For readability extract the string to build the start and end number for all the other range
    String otherStart = "TRIM(LEADING '+' FROM CONCAT(IFNULL(p.prefix, ''), IFNULL(p.rangeStart, ''))) ";
    String otherEnd = "TRIM(LEADING '+' FROM CONCAT(IFNULL(p.prefix, ''), IFNULL(p.rangeEnd, ''))) ";

    // Then check for overlap
    jpaQuerySb.append("where ( (:start >= ").append(otherStart);
    jpaQuerySb.append("and :start <= ").append(otherEnd).append(")");
    jpaQuerySb.append("or ( :end >= ").append(otherStart);
    jpaQuerySb.append("and :end <= ").append(otherEnd).append("))");

    Query q = entityManager().createQuery(jpaQuerySb.toString());
    q.setParameter("start", pStartNumber);
    q.setParameter("end", pEndNumber);

    return q.getResultList();
}
公共列表findRangeOverlap(字符串pStartNumber、字符串pEndNumber){
StringBuilder jpaQuerySb=新建StringBuilder(“从MyTable p中选择p”);
//重叠限制
//为了可读性,请提取字符串以构建所有其他范围的开始和结束编号
String otherStart=“TRIM(CONCAT的前导“+”(IFNULL(p.prefix)”),IFNULL(p.rangeStart)”)”;
String otherEnd=“TRIM(CONCAT中的前导“+”(IFNULL(p.prefix)”),IFNULL(p.rangeEnd)”)”;
//然后检查重叠
jpaQuerySb.append(“其中(:start>=”).append(其他开始);
jpaQuerySb.append(“and:start=”).append(otherStart);
jpaQuerySb.append(“and:end你试过了吗

return entityManager().createNativeQuery(jpaQuerySb.toString(), Range.class).getResultList();
?


如果构建本机查询,则必须使用实体管理器的适当方法。

这对您有帮助吗:?您好,谢谢,但我已经这样做了,concat工作正常,它只是TRIM函数所需的FROM关键字,我想它只有一个参数块。如果没有,通常添加+怎么样?您可以发布吗ur代码?添加了在主帖子中生成的HQL查询。我在复制的代码中犯了一个错误,没有使用我用参数实例化的查询,而是从StringBuilder中重新生成了一个查询。更正了主帖子中的代码以使其清晰,如果我将字符串查询改为SQL而不是HQL,则可以使用nativeQuery(就像它在MySql Workbench中工作一样)我的问题是如何让它在HQL中工作?