开发者社区> 问答> 正文

select truncate() 支持的问题

select truncate(12.0123,2);

mysql直连给出的结果会是 12.01

但通过druid 查询报错: ERROR 1064 (HY000): com.alibaba.druid.sql.parser.ParserException: ERROR. token : TRUNCATE, pos : 15

原提问者GitHub用户zhuam

展开
收起
山海行 2023-07-05 21:55:45 88 0
4 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在MySQL中,TRUNCATE函数用于将数字截断为指定的位数,并返回截断后的结果。TRUNCATE函数的语法如下:

    Copy
    TRUNCATE(X,D)
    其中,X为要截断的数字,D为要保留的小数位数。如果D为正数,则表示保留小数点后D位;如果D为负数,则表示保留小数点左边的D位。

    而在SQL中,SELECT语句用于从数据库中查询数据,并返回查询结果。因此,可以使用SELECT语句和TRUNCATE函数一起使用,例如:

    Copy
    SELECT TRUNCATE(123.456, 2);
    这个语句将返回123.46,即将123.456截断为小数点后2位。

    需要注意的是,TRUNCATE函数只能用于数值类型的数据,例如FLOAT、DOUBLE、DECIMAL等。如果对非数值类型的数据使用TRUNCATE函数,将会导致语法错误或者运行时错误。

    2023-07-30 09:38:29
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    函数TRUNCATE()在MySQL中用于截取小数点后指定位数的数字。然而,它不能直接在SELECT语句中使用。

    如果你想要在SELECT语句中截取数字的小数点后指定位数,你可以使用以下方法之一:

    使用ROUND()函数:

    SELECT ROUND(12.0123, 2);
    这将返回结果12.01。

    使用CAST()函数将数字转换为字符串,然后使用SUBSTRING_INDEX()函数截取指定位数的子字符串:

    SELECT SUBSTRING_INDEX(CAST(12.0123 AS CHAR), '.', 1) + 0;
    这将返回结果12.01。

    请注意,这些方法都是在MySQL中使用的,并且可能不与其他数据库或查询引擎兼容。你提到的错误可能是因为Druid不支持直接使用TRUNCATE()函数在SELECT语句中截取数字。你可以查看Druid的文档或咨询相关支持以了解更多信息。

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

    原回答者GitHub用户wenshao

    2023-07-06 12:29:34
    赞同 展开评论 打赏
  • 根据您提供的信息,Druid在解析SQL语句时遇到了问题。TRUNCATE函数通常用于截断小数位数,并将数字转换为指定的精度。然而,根据您的异常信息,Druid无法正确识别TRUNCATE函数。

    这可能是因为您使用的是较旧版本的Druid驱动程序,该驱动程序可能不支持TRUNCATE函数,或者存在某些配置问题。

    解决此问题的一种方法是升级Druid驱动程序到最新版本。您可以访问Druid官方网站(https://github.com/alibaba/druid)来获取最新的驱动程序和相关文档。

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

相关电子书

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