什么是基于此特定逻辑将值舍入到最接近的十进制的T-SQL语法?

时间:2017-11-22 07:50:48

标签: sql-server tsql decimal rounding

我正在使用SQL Server 2014,我的SQL查询中有以下T-SQL语法:

Select ...    
NumDays/30 as 'NumMonth',
...

NumDays是总天数,上面的语法将其转换为月份。 我的问题是如果我有NumDays = 508,它的等效NumMonth就变成16。

然而,508/30 = 16.93333 我希望结果为17,基于以下逻辑:如果结果为> = 16.5,则显示17,否则显示16。

根据本网页上提供的四舍五入解决方案,CEILINGFLOOR函数似乎都不是正确的解决方案:SQL Server ROUND, CEILING and FLOOR Examples for Decimal, Numeric and Float Data Types

1 个答案:

答案 0 :(得分:0)

试试这个......

Declare @NumDays INT = 508
        ,@i INT = 30

SELECT CAST( ROUND(CAST(@NumDays AS DECIMAL(18,2))
                     / CAST(@i AS DECIMAL(18,2)) , 0) AS INT)

在除以之前将其转换为十进制,以保留值的小数部分。