Java “如何修复无法解析的问题”;日期“;H2数据库中的常量问题?
我正在将为Windows开发的Java应用程序移植到AIX Unix。在Windows上,它使用SQL Server进行配置。在AIX上,我们尝试使用H2数据库。大多数代码都可以工作,但我在执行具有日期时间条件的查询时遇到以下错误Java “如何修复无法解析的问题”;日期“;H2数据库中的常量问题?,java,sql,jdbc,h2,Java,Sql,Jdbc,H2,我正在将为Windows开发的Java应用程序移植到AIX Unix。在Windows上,它使用SQL Server进行配置。在AIX上,我们尝试使用H2数据库。大多数代码都可以工作,但我在执行具有日期时间条件的查询时遇到以下错误 此SQL在SQL server上运行良好,但在H2DB上出现上述异常。如何解决这个问题?我需要查询日期和时间。尝试使用ISO日期文字: WHERE EM_SCHEDULER_DAILY_POLL.DATE_TIME >= '2019-06-26' AND
此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'
作为另一个评论,我给出的第一个版本(带有两个不等式)是可搜索的,这意味着数据库应该能够在
DATE\u TIME
列上使用索引,而第二个版本(使用cast-to-DATE)可能无法使用索引。因此,如果您需要调整或优化数据库,第一个版本是首选方法。您正在传递一个带有时间的值,但只有H2日期没有时间。
去掉第二个常数中的时间
'26-Jun-2019 23:59:59' --> '26-Jun-2019'
日期日期数据类型。格式为yyyy-MM-dd
映射到java.sql.Date,时间设置为00:00:00(或下一个
如果给定日期和日期的午夜不存在,可能的时间
由于夏令时更改而导致的时区)。java.time.LocalDate也是
Java 8及更高版本支持
例如:
日期
来源:
由于您只需要一天(至少在该示例中),您可以简单地使用:
DATE_TIME = '26-Jun-2019'
请注意,关于ISO也应检查,此格式不是用于日期功能的最佳格式
示例-截止日期('2019年12月1日','dd-MM-yyyy')
在学生(Id、姓名、DOB)值中插入(1,‘Abc’,截止日期('01-12-2019','dd-MM-yyyy'))H2日期没有时间,如
26-Jun-2019 23:59:59
,因此无效。你需要去掉之间的,使用日期\u时间=2019年6月26日
(因为你只想要那个日期)。我尝试了这个方法,效果很好,但我真的需要时间组件。我使用RazorSQL自动移植了数据库。我应该使用时间戳列而不是日期吗?我对H2很陌生,因此对它的数据类型不太熟悉。@Ram您不需要时间组件,因为您的WHERE
子句逻辑表示您只想匹配单个日期26-六月-2019
。如果您有其他未提及的逻辑要求,那么可能会编辑您的问题并将其显示出来。我现在看到了错误。我想在数据库数据类型上存在细微的差异。感谢您的帮助。请注意,BETWEEN
包含表达式的两端。因此,如果可行的话,请使用=“2019年6月26日”
。
'26-Jun-2019 23:59:59' --> '26-Jun-2019'
DATE_TIME = '26-Jun-2019'