开发者社区> 问答> 正文

syntax error, expect RPAREN, actual IDENTIFIER DAY

现象: 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

展开
收起
山海行 2023-07-05 21:05:35 675 0
3 条回答
写回答
取消 提交回答
  • 您遇到的问题可能是由于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语句和相关的堆栈跟踪,以便我们能够更好地帮助您解决问题。

    2023-07-30 15:06:42
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    在您的SQL语句中,DAY是一个关键字,可能会与INTERVAL关键字产生歧义,从而导致语法错误。在MySQL中,可以使用反引号(`)将关键字转义,以避免歧义。

    如果您的SQL语句仍然报错,可能是因为Druid的SQL解析器在解析SQL语句时存在一些问题。在这种情况下,您可以尝试使用Druid的WallFilter过滤器,以解决语法问题。

    2023-07-30 13:06:11
    赞同 展开评论 打赏
  • 升级版本到1.0.28就可以了

    原回答者GitHub用户huicaier

    2023-07-06 11:53:28
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载