java - H2 - 在 Java 中构建并执行查询以进行日期比较

标签 java datetime h2

我想创建一个表,其中包含另一个表的所有记录,其出生日期是<某个日期

我尝试在我的 Java 应用程序中构建并执行此查询。

比较日期(2016-12-31)是一个字符串,BirthDate 在 H2 数据库中以日期时间形式存储。

CREATE TABLE table1 AS
SELECT *
FROM temp
WHERE FORMATDATETIME(BirthDate,'yyyy-MM-dd') < 2016-12-31
GROUP BY Cod, Id
ORDER BY Cod, BirthDate

执行查询时出现此错误:

org.h2.jdbc.JdbcSQLException: Data conversion error converting "2016-12-31"; SQL statement:

最佳答案

如果 BirthDate 是日期或日期时间值,则不应将其转换为字符串值以进行此类比较。但是,对于某些比较操作,您可能需要将日期时间值转换为日期值,在这种情况下请使用 CAST(datetime AS DATE)。在您的查询中,实际上并不需要它。

日期文字不能写成2016-12-31,这样的表达式表示带有两次减法的数值表达式。日期文字应写为 DATE '2016-12-31'

CREATE TABLE table1 AS
SELECT *
FROM temp
WHERE BirthDate < DATE '2016-12-31'
GROUP BY Cod, Id
ORDER BY Cod, BirthDate

此查询中的 GROUP BY 子句也无效。 H2 在该领域不是很严格,如果分组列中不存在具有相同值的重复行,则可以接受此类查询,但您不应依赖此类行为。不能选择未分组的列,它们只能被聚合。 如果 Id 是主键,则应删除此子句,因为该子句无用。

CREATE TABLE table1 AS
SELECT *
FROM temp
WHERE BirthDate < DATE '2016-12-31'
ORDER BY Cod, BirthDate

关于java - H2 - 在 Java 中构建并执行查询以进行日期比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58140191/

相关文章:

java多次反序列化同一个对象

java - 如何在 Mule 中使用 XStream?

c# - 特定于文化的 DateTime 字符串在平台之间不一致

java - 从 Oracle 实例创建内存数据库结构

java - 查询适当的数据库模式

mysql - h2数据库中的脚本文件

java - Android:将房间数据库链接和同步到在线服务器数据库

java - N 的最大约数(不包括它自己)

angular - 在 Angular 中上传/导入 excel 工作表时,日期以数字格式显示

python - 如何获得上周五?