我正在将为 Windows 开发的 Java 应用程序移植到 AIX Unix。在 Windows 上,它使用 SQL Server 进行配置。在 AIX 上我们尝试使用 H2 数据库。大多数代码都有效,但在执行具有日期时间条件的查询时出现以下错误。
Run Code Online (Sandbox Code Playgroud)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]
此 SQL 在 SQL Server 上完美运行,但在 H2DB 上出现上述异常。如何解决这个问题?我需要查询日期和时间。
尝试使用 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,而使用迄今为止的转换的第二个版本可能无法使用索引。因此,如果您需要调整或优化数据库,第一个版本是首选方法。
| 归档时间: |
|
| 查看次数: |
19622 次 |
| 最近记录: |