java - H2 - 在 Java 中构建和执行查询到日期比较
问题描述
我想创建一个包含另一个表的所有记录的表,其中 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 在该领域不是很严格,如果分组列中没有具有相同值的重复行,则可以接受此类查询,但您不应依赖此类行为。未分组的列可能不会被选中,它们可能只会被聚合。如果Id
是主键,则应删除该子句,因为它没有用。
CREATE TABLE table1 AS
SELECT *
FROM temp
WHERE BirthDate < DATE '2016-12-31'
ORDER BY Cod, BirthDate
推荐阅读
- java - InputStreamReader readLine 方法返回错误字符串
- c# - Asp 不遵守 web.config 中设置的 defaultRedirect,视图引擎在查找其他错误页面时会中断
- javascript - Django Admin - 如何在单个按钮中转换删除操作下拉列表
- python - audio_ops 和 tf.contrib.signal 之间的不同频谱图
- hazelcast - 未定义的地图出现在集群上
- django - Django rest_auth - 如何添加自定义密码验证规则
- django - 在 Django 中从“多”字段到“一”
- c# - Entity Framework Core - 插入单向父子关系
- python - 按 group+ sklearn cross_val_score 分成训练和测试
- python - 使用 Sphinx 和 reStructuredText 将 CSS 类应用于表格行