H2数据库无法解析短格式时间戳问题:无需修改Oracle兼容SQL语句的解决方案咨询
不用改SQL!解决H2兼容Oracle日期格式的方案
没问题,我来帮你搞定这个H2兼容Oracle日期格式的小麻烦!不用修改你的原SQL语句,核心思路就是让H2完全模仿Oracle的日期解析行为,下面是具体的可行方案:
方案1:修改H2连接URL开启兼容模式
直接在你的H2数据库连接URL里添加几个参数,就能让H2识别Oracle风格的短日期字符串:
- 首先加
MODE=ORACLE,让H2切换到Oracle兼容模式,模仿Oracle的SQL语法和隐式转换逻辑 - 再加
DATETIME_FORMAT='dd-MMM-yy',指定H2解析日期字符串时用的格式——这里MMM对应月份缩写(比如AUG),yy对应两位年份 - (可选)如果需要让H2把
18解析成2018而不是1918,再加上TWO_DIGIT_YEAR_START=2000-01-01,设置两位年份的基准起始点
最终的连接URL示例:
jdbc:h2:mem:testdb;MODE=ORACLE;DATETIME_FORMAT='dd-MMM-yy';TWO_DIGIT_YEAR_START=2000-01-01
方案2:通过JVM参数全局配置
如果你的应用是通过JVM启动参数管理配置,也可以直接设置H2的全局属性,这样所有H2连接都会自动生效:
-Dh2.mode=ORACLE -Dh2.dateTimeFormat='dd-MMM-yy' -Dh2.twoDigitYearStart=2000-01-01
验证一下
配置完成后,直接执行你的原SQL语句:
SELECT * FROM ERESIS.ECH_HISFAB f WHERE f.FG_ETAT = 'A' AND TO_DATE(DT_INS) > '30-AUG-18' ORDER BY f.CD_MAT
H2会正确把'30-AUG-18'解析成2018-08-30,和Oracle的行为完全一致,不会再触发解析错误啦!
内容的提问来源于stack exchange,提问作者aratata
相关产品推荐
相关产品推荐

