db2 HOURS[*]语法问题42000-200

5fjcxozz  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(326)

我正在尝试执行此SQL查询

SELECT * FROM GY.TABLE_NAME WHERE TEST_ID < 999999999 AND current_timestamp > TEST_GMTS + 20 HOURS

当我期待它时,响应是
SQL错误42000,SQL状态:42000 SQL语句“SELECT * FROM戈伊.TABLE_NAME WHERE测试ID〈999999999 AND当前时间戳〉测试GMTS + 20小时[*]”中存在语法错误
Org.hiberante.exception.sqlgrammerexception:无法准备语句

gcuhipw9

gcuhipw91#

对于H2(以及任何其他支持标准INTERVAL数据类型的DBMS),您需要使用

SELECT * FROM GY.TABLE_NAME WHERE TEST_ID < 999999999
    AND CURRENT_TIMESTAMP > TEST_GMTS + INTERVAL '20' HOUR;

不幸的是,DB2似乎不支持这种符合标准的语法。
20 HOURS特定于DB2。
这意味着您需要对不同的数据库使用不同的SQL。
下一个版本的H2(2.0.*)还将支持更多的外来语法

SELECT * FROM GY.TABLE_NAME WHERE TEST_ID < 999999999
    AND CURRENT_TIMESTAMP > TEST_GMTS + 20 HOUR;

(with DB2也接受这种语法,所以假设您可以从当前的源代码编译H2,如果您确实需要为H2和DB2使用相同的SQL,则可以使用自己的构建版本而不是发布的版本,但是当前的H2与1.4.* 有很大的不同,您可能会遇到其他一些问题。

相关问题