我想创建一个表,其中包含另一个表的所有记录,其出生日期是<某个日期我尝试在我的 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
添加回答
举报
0/150
提交
取消