【SQL Server】数据处理小技巧, 合理取舍小数位
【摘要】 【SQL Server】数据处理小技巧, 合理取舍小数位
当对金额进行操作的时候, 对于小数处理不尽相同. 可能向上取整,可能向下取整,亦可能四舍五入取整, 也有可能保留或舍弃一部分小数.
四舍五入 : ROUND 函数
- 四舍五入取整: ROUND(val, 0) 直接四舍五入val中小数
SELECT ROUND(12.45, 0) -- 结果 : 12.00
SELECT ROUND(12, 0) -- 结果 : 12
- 四舍五入保留固定小数: ROUND(val, a) 四舍五入精确到val右a位, 或者左a位(a为负数)
SELECT ROUND(12.345,2) --结果 : 12.350
SELECT ROUND(154.36,-1) --结果 : 150.00
SELECT ROUND(154.36,-2) --结果 : 200.00
向上向下取整 : CEILING(val) / FLOOR(val)
- 对于向上取整 CEILING(val), 只要val有任意一个小数位不为0, 即向上取整.
SELECT CEILING(12.000) --结果 : 12
SELECT CEILING(12.001) --结果 : 13
SELECT CEILING(12.345) --结果 : 13
- 向下取整 FLOOR(val) , 无论val中小数是不是为0 全部舍弃掉
SELECT FLOOR(12.000) --结果 : 12
SELECT FLOOR(12.543) --结果 : 12
以上为基本的四舍五入与取整操作, 但是实际工作中不一定满足工作需求, 比如Action: 保留2位小数向下取整 (舍弃掉2位小数后的所有小数).
由于SQL Server中 Ceiling 和 Floor 函数 不能像Oracle中直接可以设置取整的小数位. 所以对于向上下取整且保留固定小数位解决办法:
方法1 : SELECT CEILING(12.345 * 100) / 100
方法2 : SELECT LEFT(12.345, CHARINDEX('.', 12.345) + 2)
注意: 方法1的结果为: 12.340, 而方法2的结果为: 12.34.
同样对于四舍五入保留小数的时候Round函数同样也会出现舍弃的小数补零的情况, 代替办法可以为:
SELECT CONVERT(decimal(18,2), 12.356)
利用Convert方法转换结果为: 12.36, 末尾不会出现补零现象, 如果使用Round(12.356, 2), 结果会为 12.360.
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)