HOURS[*]语法问题42000-200



我正在尝试执行这个SQL查询

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

当我期待它时,响应是

SQL error 42000, SQL state: 42000SQL语句"SELECT * FROM GY"语法错误。TABLE_NAME WHERE TEST_ID &lt999999999 AND current_timestamp>TEST_GMTS + 20 HOURS[*]">

Org.hiberante.exception。Sqlgrammerexception: could not prepare statement

对于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;

(仅HOUR,HOURS无效)。这种语法也被DB2所接受,所以假设您可以从当前的源代码编译H2,如果您确实需要为H2和DB2使用相同的SQL,那么您可以使用自己的构建而不是发布的版本,但是当前的H2与1.4非常不同。你可能会遇到一些其他的问题。

最新更新