我正在将为Windows开发的Java应用程序移植到AIX。在Windows上,它使用Server进行配置。在AIX上,我们尝试使用H2数据库。大多数代码都正常工作,但在执行具有日期时间条件的查询时,我会得到以下错误。
org.h2.jdbc.JdbcSQLDataException:无法解析“日期”常量"26-Jun-2019";SQL语句:选择EM_SCHEDULER_DAILY_POLL.*从EM_SCHEDULER_DAILY_POLL,EM_CONTROLLER,其中EM_SCHEDULER_DAILY_POLL.CONTROLLER_ID = EM_CONTROLLER.CONTROLLER_ID和EM_SCHEDULER_DAILY_POLL.DATE_TIME之间的‘26-6月-2019 23:59:59’和POLLED_SUCCESSFULLY=0和EM_SCHEDULER_DAILY_POLL.CONTROLLER_ID=30 22007-199
这个SQL在server上工作得很好,但在H2DB上出现了上述异常。如何解决这个问题?我需要查询的日期和时间。
发布于 2019-06-26 05:15:38
尝试使用ISO日期文本:
WHERE
EM_SCHEDULER_DAILY_POLL.DATE_TIME >= '2019-06-26' AND
EM_SCHEDULER_DAILY_POLL.DATE_TIME < '2019-06-27'请注意,由于您只是在单个日期上查找记录,所以还可以尝试将列转换为date并进行一次比较:
WHERE CAST(EM_SCHEDULER_DAILY_POLL.DATE_TIME AS DATE) = '2019-06-26'作为另一条评论,我给出的第一个版本(包含这两个不等式)是可行的,这意味着数据库应该能够在DATE_TIME列上使用索引,而第二个版本(使用至今的强制转换)可能不能使用索引。因此,如果您需要优化或优化数据库,第一个版本是首选的方法。
发布于 2019-06-26 05:19:38
您正在传递一个带有时间的值,但是H2日期只有一个。去掉第二个常数中的时间。
'26-Jun-2019 23:59:59' --> '26-Jun-2019'日期数据类型。格式是。 映射到java.sql.Date,时间设置为00:00:00 (如果由于夏时制更改,给定日期和时区不存在午夜,则映射到下一个可能的时间)。Java8和更高版本也支持java.time.LocalDate。 示例: 日期
资料来源:H2的数据类型.
由于您只想有一天(至少在这个示例中是这样),您可以简单地使用:
DATE_TIME = '26-Jun-2019'注意,关于ISO的https://stackoverflow.com/a/56765647/4391450也应该检查,这种格式不是最好的。
发布于 2020-04-29 07:35:58
使用TO_DATE函数
示例- TO_DATE('01-12-2019',‘dd yyyy’)
在学生中插入(Id,Name,道布)值(1,'Abc',TO_DATE('01-12-2019',‘dd yyyy’))
https://stackoverflow.com/questions/56765568
复制相似问题