现象: syntax error, expect RPAREN, actual IDENTIFIER DAY 结果: 执行结果是正确的,我再sql客户端验证过这个语句,有正确的结果返回 在druid的执行过程中结果也是正确的,只是有错误的信息抛出;
我的sql语句: SELECT distinct(user_id) FROM user_assets WHERE NOW() BETWEEN DATE_SUB(gmt_end, INTERVAL (?+1) DAY ) AND DATE_SUB(gmt_end, INTERVAL ? DAY ) druid版本: 1.0.19
原提问者GitHub用户huicaier
您遇到的问题可能是由于Druid版本较旧导致的。在Druid 1.0.19中,对于某些语法结构的处理存在一些限制和问题。
针对您的具体情况,可以尝试以下解决方案:
1. 确保SQL语句的括号匹配正确。错误消息"expect RPAREN, actual IDENTIFIER DAY"表明Druid期望一个右括号(RPAREN),但实际上却得到了标识符(IDENTIFIER)"DAY"。请确保在SQL语句中所有的左括号和右括号都成对出现,并且没有语法错误。例如,检查INTERVAL (?+1) DAY )
中的括号是否正确。
2. 尝试更新到最新版本的Druid。Druid不断进行改进和修复bug,新版本可能会修复一些旧版本中的限制和问题。您可以尝试更新到最新版本的Druid(例如1.2.9),并重新运行您的代码以查看问题是否得到解决。
如果以上解决方案仍然无效,建议您提供更详细的信息,例如完整的SQL语句和相关的堆栈跟踪,以便我们能够更好地帮助您解决问题。
在您的SQL语句中,DAY是一个关键字,可能会与INTERVAL关键字产生歧义,从而导致语法错误。在MySQL中,可以使用反引号(`)将关键字转义,以避免歧义。
如果您的SQL语句仍然报错,可能是因为Druid的SQL解析器在解析SQL语句时存在一些问题。在这种情况下,您可以尝试使用Druid的WallFilter过滤器,以解决语法问题。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。