在SQL Server中如何对0.5进行取整?示例输入:16.65
在SQL Server中处理含0.5的数值取整(以16.65为例)
嘿,针对你提到的在SQL Server里对包含0.5的数值执行取整的需求(比如示例输入16.65),我整理了几种常用的实现方式,你可以根据业务场景选择合适的:
1. ROUND()函数:标准舍入(默认银行家舍入法)
ROUND()是最常用的取整函数,默认遵循四舍六入五成双(银行家舍入法)——简单说就是当小数部分正好是0.5时,会舍入到最近的偶数;如果小数部分大于0.5则直接进位。
- 针对你的示例16.65:
SELECT ROUND(16.65, 0); -- 返回结果:17.00
因为16.65的小数部分是0.65>0.5,所以直接进位到17。
- 若遇到正好是x.5的数值(比如16.5、17.5):
SELECT ROUND(16.5, 0); -- 返回16.00(16是偶数,舍去0.5) SELECT ROUND(17.5, 0); -- 返回18.00(17是奇数,进位到偶数18)
如果想要强制对x.5的数值都进位(不遵循银行家舍入),可以用自定义逻辑:
SELECT CASE WHEN ABS(YourNumber) - FLOOR(ABS(YourNumber)) = 0.5 THEN FLOOR(YourNumber) + SIGN(YourNumber) ELSE ROUND(YourNumber, 0) END AS RoundedValue FROM YourTable;
把YourNumber和YourTable换成你实际的字段和表名即可。
2. CEILING()函数:向上取整
不管小数部分是多少,直接取大于等于该数值的最小整数:
SELECT CEILING(16.65); -- 返回17 SELECT CEILING(16.15); -- 同样返回17
适合需要“只要有小数就进位”的场景。
3. FLOOR()函数:向下取整
直接取小于等于该数值的最大整数,也就是舍去所有小数部分:
SELECT FLOOR(16.65); -- 返回16 SELECT FLOOR(16.99); -- 还是返回16
4. 直接转换为整数类型:截断取整
通过CAST或CONVERT把数值转为INT类型,会直接截断小数部分,对正数来说效果和FLOOR()一致,但负数要注意区别:
SELECT CAST(16.65 AS INT); -- 返回16 SELECT CONVERT(INT, 16.65); -- 返回16
⚠️ 注意:如果是负数,比如-16.65,CAST会返回-16,而FLOOR()会返回-17,根据需求选择。
内容的提问来源于stack exchange,提问作者rajesh kumar




