我目前面临以下问题: 我想在预准备语句中获取当前时间与给定时间戳之间的时间差。
public List<Foo> getFoos(String id, Timestamp ts) {
return jdbcTemplate.query(
"SELECT TIMESTAMPDIFF(2, (CURRENT TIMESTAMP - ?)) AS NEW_TIMESTAMP FROM SCHEMA.TABLE WHERE ID = ?",
new Object[]{ts, id},
(rs, rowNum) -> mapFooFromResultSet());
}
此查询将失败并显示
com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-402, SQLSTATE=42819, SQLERRMC=-, DRIVER=
-402 AN ARITHMETIC FUNCTION OR OPERATOR function-operator IS APPLIED TO CHARACTER OR DATETIME DATA
我正在使用DB2数据库,无法切换到任何其他数据库驱动程序。
所以我的问题是如何在当前时间和给定java.sql.Timestamp值之间的sql语句中实现时差?
提前感谢您的帮助。
答案 0 :(得分:0)
似乎函数TIMESTAMPDIFF
不接受时间戳,但需要docs string-expression
段中指定的字符串值。在示例中,他们使用CAST
,CHAR
和TIMESTAMP
函数,因此以下内容可能会解决问题。
需要以YYYY-MM-DD-hh.mm.ss
格式指定相应的String值,而不是Timestamp对象:
SELECT TIMESTAMPDIFF(2, CHAR(CURRENT TIMESTAMP - TIMESTAMP(?))) AS NEW_TIMESTAMP
FROM SCHEMA.TABLE
WHERE ID = ?
答案 1 :(得分:0)
如@Idz所述,TIMESTAMPDIFF
需要string-expression
。查看所提供网站上的最后一个示例,您将看到解决方案。
对于我的示例,它使用以下代码:
"SELECT TIMESTAMPDIFF(2, CAST(CURRENT_TIMESTAMP - CAST(? AS TIMESTAMP) AS CHAR(22))) AS NEW_TIMESTAMP FROM SCHEMA.TABLE WHERE ID = ?"