第120章 SQL函数 ROUND

哈喽,你这发来的SQL ROUND函数说明看着挺详细的哈。
不过说实话,直接全抄粘贴有点太官方了,我都不好意思直接用。

让我跟你唠唠我上次碰到的实际情况。
大概是在2 02 3 年8 月,我在处理一个医药公司的销售数据报表时,对啊就是那个项目,发现他们的财务系统导出来的金额啊,小数点后面有两位,但业务部门要三位,还得四舍五入。
我试了试这个ROUND函数,当时用的就是SQL Server,ROUND(sales_amount, 2 ),确实能把小数位调整。
但最烦的是,有时候明明是四舍五入,它却显示成了截断,比如9 .9 9 四舍五入到两位就是1 0.00,但用ROUND函数结果就是9 .9 9 后来我查了资料,才搞明白原来是数据库默认行为,加上数字5 的时候是向上舍入,这点倒是符合你说的"数字5 始终向上舍入"。

我还在想一个问题啊,就是你说$JUSTIFY函数在ROUND操作后返回指定数量的尾随零。
我这边没见过这个函数啊,也不确定它到底是个啥用的,感觉像是某个特定数据库系统自带的扩展功能?如果是标准SQL的话,好像没这个说法。

还有啊,你说带有flag参数的ROUND处理INF和NAN的情况。
这个我也没试过,上次处理异常值也就用了简单的CASE WHEN value IS NULL OR value = 'INF' THEN NULL之类的,没敢动ROUND函数。
这个细节得再研究下。

反正你看着办吧,这ROUND函数用起来是挺方便的,但要注意那些小细节,特别是不同数据库系统的实现差异。
我这边还在琢磨那个$JUSTIFY函数到底有啥用呢...

Oracle不显示小数点前的0

1 . 打开SQL编辑器,创建空白窗口。
2 . 在Oracle里,用临时表做SQL实验。
3 . 通常用ROUND函数四舍五入数字,比如ROUND(1 2 3 .4 5 6 , 2 )。
4 . 如果要截取小数,用TRUNC函数,如TRUNC(1 2 3 .4 5 6 , 2 )。
5 . 直接输入数字,无需参数,比如1 2 3 .4 5 6 6 . ROUND函数不带参数也能四舍五入,如ROUND(1 2 3 .4 5 6 )。
你自己掂量。

TRUNC()函数

说白了,TRUNC函数就是SQL里的"剪刀手",直接咔嚓掉不需要的部分,不搞任何四舍五入的花架子。

先说最重要的数字截断:去年我们跑那个电商项目,处理用户积分时,用TRUNC(积分, 2 )直接砍掉小数位,避免四舍五入导致积分计算误差。
记得有一次处理3 000量级的数据,如果用ROUND,尾数对齐乱成麻絮,改用TRUNC后秒变整齐,效率高了一大截。
另外,负数参数的用法挺骚的,比如TRUNC(1 2 3 4 .5 6 , -2 )会给你截出1 2 00,从左边数保留两位数,这个点很多人没注意。

等等,还有个事,我一开始也以为TRUNC只管数字,后来发现它对日期下手更狠。
比如TRUNC('2 02 3 -05 -1 5 ', 'MONTH')直接给你削成'2 02 3 -05 -01 ',精确到月,毫不含糊。
用行话说叫雪崩效应,其实就是前面一个小延迟把后面全拖垮了,这种精度控制特别适合报表统计场景。

最后提醒个坑:TRUNC对非数字类型(比如字符串)也能用,但结果很诡异,比如TRUNC('abcde', 2 )会给你截出'ab',按字符算的,这个用法得慎重点。
其实简单说,这个函数够用但不够灵活,值得试试,但别乱用。