我正在使用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的算术溢出错误。
答案 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
。