SQL中使用FLOOR函数取整时如何去除结果小数位末尾的0
问题原因
返回结果带.0的核心原因是:你整个计算过程的数值类型都是DECIMAL(精确小数类型),FLOOR()函数处理DECIMAL运算后返回值依然是DECIMAL类型,这类类型会固定保留对应的小数位占位,哪怕小数部分实际为0,也会展示出.0后缀。
另外你贴的示例语句末尾多写了一个右括号,实际执行会报语法错误,改写时可以一并修正。
解决方法
直接把FLOOR()计算完成的结果显式转换成整数类型即可——整数类型不会存储小数位,返回的结果自然就是纯整数格式,不会带末尾的.0。
通用写法(适配绝大多数主流数据库):
CAST(FLOOR(CAST(amount AS DECIMAL(16))/rate/100) AS INT)
针对不同数据库,你也可以选择对应适配的写法:
- MySQL/MariaDB:可以用
SIGNED(有符号整数)、UNSIGNED(无符号整数)代替INT,示例:CAST(FLOOR(CAST(amount AS DECIMAL(16))/rate/100) AS SIGNED) - PostgreSQL、SQL Server、Oracle 12c及以上版本:直接用上面的通用
AS INT写法即可正常生效 - 低版本Oracle:可以通过
TO_NUMBER指定格式返回整数,示例:TO_NUMBER(FLOOR(CAST(amount AS DECIMAL(16))/rate/100), '9999999999')
如果你只是需要在展示层去掉.0,不需要拿结果做后续数值计算,也可以直接把结果转成字符串类型,但这种方式不推荐用于需要后续数值运算的场景,避免隐式类型转换带来的异常。
内容的提问来源于stack exchange,提问作者user16462786
相关产品推荐
相关产品推荐

