【问题标题】:SQLSyntaxErrorException Using LTRIM to trim character 'x' in querySQLSyntaxErrorException 使用 LTRIM 修剪查询中的字符“x”
【发布时间】:2021-10-15 20:17:04
【问题描述】:

我使用TRIM函数修剪查询中的一些字符,我使用hibernate以下是我的查询。

from ABean s where s.cId in (select ca.id from CBean ca where LTRIM(ca.refNumber,'0') = LTRIM('$ref$','0') and ca.valid = 0)

$ref$ 被查询中的实际值替换。

当我运行 DB2 和运行 Mockito 测试(使用内存数据库)时,我看到了不同的行为。 使用 DB2,此查询工作正常,但使用内存数据库中的 Mockito,我得到java.sql.SQLSyntaxErrorException,错误是这样的。

Syntax error: Encountered "," at line 1, column {column_number_in_actual_query}.

我无法让它在内存数据库中使用,我做错了什么吗? 谢谢。

【问题讨论】:

    标签: sql hibernate db2 mockito relational-database


    【解决方案1】:

    在 IBM DB2 中,在 SYSIMB 模式中,LTRIM 采用第二个参数,即像您所拥有的那样被修剪的字符 (see here)。但是,在 SYSFUN 模式(以及大多数其他 SQL 实现)中,它只接受一个参数并假设您正在修剪空白 (see here)。

    根据错误,解释器似乎没有期待逗号,因此它可能正在尝试使用更标准的函数版本,并在看到第二个参数时失败。

    基于documentation for function references,您应该能够将 LTRIM 替换为 SYSIBM.LTRIM

    【讨论】:

    • 替换为 SYSIBM.LTRIM 但现在得到 java.sql.SQLSyntaxErrorException: Syntax error: Encountered "LTRIM" at line 1, column {some column index}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 2022-11-04
    • 1970-01-01
    相关资源
    最近更新 更多