我有一个调用几个列上的函数的查询。结果有3个小数位,它已经四舍五入,但输出总是有“x.000”。
这是查询...
SELECT SystemName, Caption, Label,
[dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', Capacity) AS Capacity,
[dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', FreeSpace) AS [Free Space],
[dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', Capacity - FreeSpace) AS [Used Space],
100 * FreeSpace / Capacity AS [% of Free Space],
Warning =
CASE
WHEN 100 * FreeSpace / Capacity BETWEEN 10 AND 20 THEN 'Proactive Warning'
WHEN 100 * FreeSpace / Capacity <= 10 THEN 'Critical Warning'
END
FROM CCS_Win32_Volume
WHERE ((100 * FreeSpace / Capacity) < 20)
ORDER BY SystemName, Caption
任何输入都表示赞赏! :)
答案 0 :(得分:1)
如果您真的不关心保持这种精确度,可以使用SUBSTRING和CHARINDEX剥离结束:
SUBSTRING([dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', Capacity), 0, CHARINDEX([dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', Capacity), '.')
如果将结果存储在临时表中然后应用格式化可能会更容易,您可能需要先将其转换为varchar。
祝你好运!答案 1 :(得分:1)
在您的函数中,更改返回类型的小数精度。所以,现在,我希望返回类型类似于decimal(18,3)
。这意味着18位数,小数点后三位(小数点右侧)。相反,请更改输出以使用您希望的小数位数。例如,如果你想要零,你可以将它转换为bigint或十进制(18,0)
如果您不拥有该函数,那么您可以在调用该函数后强制转换输出,但它看起来并不好看
Cast([dbo].[CCS_DIGITAL_STORAGE_CONVERTER]('B', 'GB', Capacity) AS Decimal(18,0))