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

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


我尝试在我的 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:


慕运维8079593
浏览 88回答 1
1回答

千巷猫影

如果BirthDate是日期或日期时间值,则不应将其转换为字符串值以进行此类比较。但是,对于某些比较操作,您可能需要将日期时间值转换为日期值,在这种情况下请使用CAST(datetime AS DATE). 在您的查询中,实际上并不需要它。日期文字不能写成2016-12-31,这样的表达式表示带有两次减法的数值表达式。日期文字应写为DATE '2016-12-31'.CREATE TABLE table1 ASSELECT *FROM tempWHERE BirthDate < DATE '2016-12-31'GROUP BY Cod, IdORDER BY Cod, BirthDate此查询中的子句GROUP BY也无效。H2 在该领域不是很严格,如果分组列中没有具有相同值的重复行,则可以接受此类查询,但您不应该依赖这种行为。不能选择未分组的列,它们只能被聚合。如果Id是主键,则应删除此子句,因为该子句无用。CREATE TABLE table1 ASSELECT *FROM tempWHERE BirthDate < DATE '2016-12-31'ORDER BY Cod, BirthDate
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java