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
我想创建一个 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