我正在尝试执行这个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 <999999999 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非常不同。你可能会遇到一些其他的问题。