今天写sql要取用指定年月的最后一天。使用的是kingbase(postgre)。于是使用了interval对时间戳进行处理。结果发现程序正常执行但druid报错
merge sql error。

select date_trunc('month', to_date('2021-01-01')) + interval '1 month' - interval '1 day'

问题分析

一开始以为是使用了不支持的关键字(毕竟是kingbase)

  网上的解决办法都是通过关闭druid 的sql检查来实现规避报错的。可这不是掩耳盗铃吗?

  通过查阅标准sql语法可以发现在使用interval关键字的过程中我错误地将时间粒度指示词month放在了单引号内部。更改为以下语句后,报错消失。

select date_trunc('month', to_date('2021-01-01')) + interval '1‘ month - interval '1day

总结

  druid报merge sql error错误,但sql正常返回结果通常是由于不够标准的sql语法导致的。这可能会影响查询的实际执行效率,但不影响正常返回结果。参考 sql 标准语法修正后报错即消失。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐