为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕运维8079593 2023-09-06 15:56:34
我想创建一个表,其中包含另一个表的所有记录,其出生日期是<某个日期我尝试在我的 Java 应用程序中构建并执行此查询。比较日期 (2016-12-31) 是一个字符串,出生日期在 H2 数据库中存储为日期时间。CREATE TABLE table1 ASSELECT *FROM tempWHERE FORMATDATETIME(BirthDate,'yyyy-MM-dd') < 2016-12-31GROUP BY Cod, IdORDER BY Cod, BirthDate当执行查询时,我收到此错误:org.h2.jdbc.JdbcSQLException: Data conversion error converting "2016-12-31"; SQL statement:
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

如果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


查看完整回答
反对 回复 2023-09-06
  • 1 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信