使用函数删除十进制到列

时间:2014-05-15 13:20:45

标签: sql sql-server

我有一个调用几个列上的函数的查询。结果有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

任何输入都表示赞赏! :)

2 个答案:

答案 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))