java - 插入时间戳时的 H2 org.h2.jdbc.JdbcSQLSyntaxErrorException
问题描述
比较时间戳的 SQL 查询在 MySQL 中有效,但在使用 H2 数据库时失败。
例如,这是产生异常的查询:
SELECT * FROM table WHERE time >= '2019-02-01T10:59:12.632Z' AND time <= '2019-04-12T10:59:12.632Z'
查询是使用 Java 代码动态创建的,上面的时间戳是java.time.Instant
.
我什至尝试过使用其他类型的日期/时间对象,结果相同。
此查询使用 MySQL 可以正常执行,但使用 H2 DB 会引发以下错误:
org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement
"SELECT * FROM table WHERE time>= 2019-04-10T13[*]:31:19.498Z AND time <= 2019-04-07T13:31:19.498Z";
SQL statement:
SELECT * FROM table WHERE time >= 2019-04-10T13:31:19.498Z AND time<= 2019-04-07T13:31:19.498Z
我发现使用冒号分隔的时间戳会导致这个问题令人费解,特别是因为H2 文档使用类似的时间戳
解决方案
尝试正确转换日期字符串
SELECT * FROM table WHERE time >= str_to_date('2019-02-01 10:59:12.632 ', '%Y-%m-%d %T.%f')
AND time <= str_to_date( '2019-04-12 10:59:12.632 ' , '%Y-%m-%d %T.%f')
推荐阅读
- dns - 带有 www 的 Cloudlfare 子域不起作用
- javascript - 构建树数据结构表单mysql表递归问题
- java - 扩展基类和具有@Id 注释的两个类是否会导致实体映射中的重复列?
- windows - Windows - 局域网计算机启动后唤醒后的不同启动程序
- java - 霍夫曼树和节点的出现顺序
- angularjs - angularJS 和 Bootstrap:错误:[$injector:unpr]
- android - 从 GridView 迁移到 GridLayoutManager
- javascript - Ember js 函数打印源代码而不是其实际值
- ios - Swift:单元格 TableviewCell 中的手势不起作用
- android - 无法在 android studio 3 中设置 SDK 路径?