HSQLDB 2.7.2时间戳小数秒解析是否存在Bug?
HSQLDB 2.7.2 to_timestamp 解析小数秒前导零丢失问题判定
这确实是HSQLDB的解析Bug。
问题复现与影响
- 执行SQL语句:
to_timestamp('24-04-2019 08:46:43.082893000', 'dd-mm-yyyy hh24:mi:ss.FF') - 错误解析结果:
小数部分首位的2019-04-24 08:46:43.828930被忽略,原本的0.082893000被错误解析为0.82893,直接导致分页查询逻辑异常——当把最后一页的截止时间作为下一页起始时间时,起始时间被错误放大,进而丢失本该被查询到的数据。
结合官方文档的判定
HSQLDB官方文档明确说明FF用于表示小数秒,无需重复使用,应支持任意精度的小数秒解析。但当前实现中,解析逻辑错误地丢弃了小数部分的前导零,不符合文档描述的预期行为,属于解析逻辑的缺陷。
临时解决方案
- 可以指定固定精度的小数秒格式,比如使用
FF9替代FF,确保前导零被正确解析:to_timestamp('24-04-2019 08:46:43.082893000', 'dd-mm-yyyy hh24:mi:ss.FF9') - 也可以在传入时间字符串前,确保小数部分的格式被正确处理,避免解析偏差。
内容的提问来源于stack exchange,提问作者DailyFrankPeter
相关产品推荐
相关产品推荐

