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
在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函数,将会导致语法错误或者运行时错误。
函数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的文档或咨询相关支持以了解更多信息。
问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14
原回答者GitHub用户wenshao
根据您提供的信息,Druid在解析SQL语句时遇到了问题。TRUNCATE
函数通常用于截断小数位数,并将数字转换为指定的精度。然而,根据您的异常信息,Druid无法正确识别TRUNCATE
函数。
这可能是因为您使用的是较旧版本的Druid驱动程序,该驱动程序可能不支持TRUNCATE
函数,或者存在某些配置问题。
解决此问题的一种方法是升级Druid驱动程序到最新版本。您可以访问Druid官方网站(https://github.com/alibaba/druid)来获取最新的驱动程序和相关文档。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。