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

H2 - Build and execute query in Java to date comparison

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

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

比较的日期 (2016-12-31) 是一个字符串,出生日期在 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 在这方面不是很严格,如果分组列中没有具有相同值的重复行,H2 可能会接受这样的查询,但你不应该依赖这种行为。可能不会选择未分组的列,它们可能只会被聚合。 如果Id是一个主键,你应该删除这个无用的子句。

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