SQL - DB2 中的 UPPER 函数不起作用

Posted

技术标签:

【中文标题】SQL - DB2 中的 UPPER 函数不起作用【英文标题】:SQL - UPPER function in DB2 not working 【发布时间】:2012-04-15 21:31:54 【问题描述】:

我正在使用 IBM DB2 Type 4 驱动程序 (db2jcc4.jar) 从我的 Java Web 应用程序连接到 DB2 数据库 (DB2 v9.7.400.501)。当我尝试执行这样的 SQL 语句时,

SELECT * FROM USERS WHERE UPPER(USERNAME) = UPPER('testuser');

我得到以下异常:

com.ibm.db2.jcc.am.SqlSyntaxErrorException:DB2 SQL 错误: SQLCODE=-104,SQLSTATE=42601,SQLERRMC=;;= UPPER('testuser');END-OF-STATEMENT, DRIVER=4.12.55

问题出在UPPER函数,因为正常的select语句执行正常。

【问题讨论】:

"END-OF-STATEMENT" 可能会推断您正在运行它会将第一个单引号解释为字符串的结尾?您可以尝试用两个单引号替换单引号来测试是否是这样。 @Bridge 现在我得到一个不同的例外:com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=testuser;ER(LOGIN) = UPPER('';CONCAT, DRIVER=4.12.55 看来我的猜测是错误的。 您是否尝试过使用 sql 工具执行相同的语句(最好通过具有相同驱动程序的 jdbc)?如果是,是否会产生相同的错误? 是的,我使用 Eclipse 数据库工具中的相同驱动程序连接到相同的数据库并执行相同的语句。效果很好 【参考方案1】:

也许你应该这样使用:

SELECT * FROM USERS WHERE UPPER(USERNAME) LIKE UPPER('testuser');

您的带有 '=' 的代码对于 SQLite 似乎没问题,但不了解 db2。

UPD。经过一番调查,我可以说错误是由 Java 代码引起的,它试图在一个查询中使用 ';' 执行多个语句作为分隔符。 您应该尝试对多个语句使用 PreparedStatement、addBatch() 和 executeBatch()。

UPD2。这是与 DB2 相关的问题。 PostgreSQL,afaik,允许在单个查询中使用多个语句。

【讨论】:

不,没有任何区别。我得到了以下异常:com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=;;KE UPPER('testuser');END-OF-STATEMENT, DRIVER=4.12.55

以上是关于SQL - DB2 中的 UPPER 函数不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Informatica Cloud DB2 for i cdc 连接类型 SQL 覆盖不起作用

ISDATE 相当于 DB2

DB2 Funktion不起作用,错误代码SQLCODE = -104

R 中的粘贴函数在构建 SQL 查询时不起作用

Excel SQL 查询中的 DateAdd 函数不起作用

使用SQL Server中的UPPER函数进行索引