我想创建一个表,其中包含另一个表的所有记录,其出生日期是<某个日期
我尝试在我的 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/