如何解决 H2 数据库中无法解析“DATE”常量问题?

Ram*_*Ram 7 java sql jdbc h2

我正在将为 Windows 开发的 Java 应用程序移植到 AIX Unix。在 Windows 上,它使用 SQL Server 进行配置。在 AIX 上我们尝试使用 H2 数据库。大多数代码都有效,但在执行具有日期时间条件的查询时出现以下错误。

org.h2.jdbc.JdbcSQLDataException: Cannot parse "DATE" constant "26-Jun-2019"; SQL statement:
SELECT EM_SCHEDULER_DAILY_POLL.* FROM EM_SCHEDULER_DAILY_POLL, EM_CONTROLLER WHERE EM_SCHEDULER_DAILY_POLL.CONTROLLER_ID =
EM_CONTROLLER.CONTROLLER_ID AND EM_SCHEDULER_DAILY_POLL.DATE_TIME
BETWEEN '26-Jun-2019' AND '26-Jun-2019 23:59:59' AND
POLLED_SUCCESSFULLY=0 AND EM_SCHEDULER_DAILY_POLL.CONTROLLER_ID=30
[22007-199]
Run Code Online (Sandbox Code Playgroud)

此 SQL 在 SQL Server 上完美运行,但在 H2DB 上出现上述异常。如何解决这个问题?我需要查询日期和时间。

Tim*_*sen 8

尝试使用 ISO 日期文字:

WHERE
    EM_SCHEDULER_DAILY_POLL.DATE_TIME >= '2019-06-26' AND
    EM_SCHEDULER_DAILY_POLL.DATE_TIME < '2019-06-27'
Run Code Online (Sandbox Code Playgroud)

请注意,由于您只是查找单个日期的记录,因此您还可以尝试将列转换为日期并进行单个比较:

WHERE CAST(EM_SCHEDULER_DAILY_POLL.DATE_TIME AS DATE) = '2019-06-26'
Run Code Online (Sandbox Code Playgroud)

作为另一条评论,我给出的第一个版本具有两个不等式,这意味着数据库应该能够在列上使用索引DATE_TIME,而使用迄今为止的转换的第二个版本可能无法使用索引。因此,如果您需要调整或优化数据库,第一个版本是首选方法。