开发者社区> 问答> 正文

druid1.7 sqlparser mysql5.6 解析报错 sql如下

select truncate(AVG(mark),2) from tabName where spu = ? and is_delete=0 and is_check = '2'

SQLExprParser 的primary()方法中 没有truncate的定义

原提问者GitHub用户boboChina

展开
收起
山海行 2023-07-05 22:01:07 60 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    您提供的信息比较简单,无法确定具体报错信息,但可能存在以下几种可能的原因:

    SQL语法错误:首先需要验证SQL语句本身是否正确,是否符合MySQL 5.6的语法规范。可以尝试直接在MySQL 5.6中执行该SQL语句,以验证SQL语句是否正确。

    Druid版本问题:Druid SQL Parser是一个开源的SQL解析库,用于解析SQL语句,并生成AST。不同版本的Druid SQL Parser可能存在差异,可能会导致解析结果不同。因此,可能需要检查使用的Druid版本是否正确,并尝试使用其他版本的Druid SQL Parser进行解析。

    解析器配置问题:Druid SQL Parser提供了一些配置参数,用于控制SQL解析的行为,例如是否启用ANSI模式、是否将所有字段解析为小写等。在解析SQL语句之前,需要根据实际情况对解析器进行配置,以保证解析结果正确。

    针对这个问题,可以尝试如下解决方案:

    验证SQL语句的正确性:首先需要验证SQL语句本身是否正确,是否符合MySQL 5.6的语法规范。可以尝试直接在MySQL 5.6中执行该SQL语句,以验证SQL语句是否正确。

    检查Druid版本:检查使用的Druid版本是否正确,并尝试使用其他版本的Druid SQL Parser进行解析。

    检查解析器配置:检查Druid SQL Parser的配置是否正确,并尝试调整配置参数,以保证解析结果正确。

    2023-07-29 23:23:09
    赞同 展开评论 打赏
  • 问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14

    原回答者GitHub用户wenshao

    2023-07-06 12:31:31
    赞同 展开评论 打赏
  • 根据您提供的SQL语句以及错误信息,可以看出Druid解析器在解析truncate函数时抛出了异常。具体错误信息为com.alibaba.druid.sql.parser.ParserException: error LPAREN

    根据Druid的文档,当前版本的Druid(1.7)对于MySQL数据库的truncate函数的支持是有限的,并且不支持所有可能的语法和功能。因此,您遇到的问题可能是由于Druid解析器尚未实现或者存在一些限制导致的。

    建议您检查您的SQL语句的语法,确保其符合MySQL数据库的语法规范。如果语法正确,那么您可能需要考虑使用其他方法来解析和执行该SQL语句,例如使用MySQL自带的JDBC驱动程序来执行。

    另外,根据您的SQL语句select truncate(AVG(mark),2) from tabName where spu = ? and is_delete=0 and is_check = '2',我注意到您可能想要使用MySQL的TRUNCATE函数来对AVG(mark)结果进行截取小数位数。但是请注意,MySQL的TRUNCATE函数是用于截取小数位数的,而不是用于清空表的。如果您想要清空表,请使用TRUNCATE TABLE语句。

    2023-07-06 09:16:30
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载

相关镜像