如何更正此T-SQL语法以获得没有小数位的输出?

时间:2016-10-11 13:31:07

标签: sql sql-server casting decimal nvarchar

我正在使用SQL Server 2016,我的查询中有以下T-SQL代码:

CAST(ROUND([Count of Bookings] * 100.0 / SUM([Count of Bookings]) OVER (PARTITION BY [Market Final], [PropertyCode]), 0) AS NVARCHAR(15)) + '%'

此代码的当前输出示例为:40.000000000000%

我期待输出为:40%

作为注释(我不知道这是否相关):如果我将nvarchar(x)中的数字更改为低于15,我会收到以下错误:

  

将表达式转换为数据类型nvarchar的算术溢出错误。

2 个答案:

答案 0 :(得分:2)

使用str()代替cast()

str(round([Count of Bookings] * 100.0 /
          sum([Count of Bookings]) over(PARTITION BY [Market Final], [PropertyCode]
         ) , 0), 3, 0)  + '%'

实际上,我认为默认情况下str()轮次(文档在这个问题上是否可以不那么明确?):

str([Count of Bookings] * 100.0 /
    sum([Count of Bookings]) over (PARTITION BY [Market Final], [PropertyCode]
                                  ), 3, 0)  + '%'

答案 1 :(得分:0)

ROUND()函数的任何输入的返回类型取决于输入数据类型,如MSDN所示。

这会导致您的ROUND()返回带小数点的数据类型(在此计算中为float),您必须在转换为nvarchar后将其截断(或投出它)之前是int