在case语句中设置尾数为零的小数位数

时间:2015-09-16 23:46:40

标签: sql-server-2008-r2 decimal case

在SQL Server 2008中,我试图将结果截断为特定数量的小数位,具体取决于字段的值。我遇到的麻烦是如果最后一个小数位是零,那么它不会显示它。我的代码如下:

case when @field >= 250 then round(@field,1,1) when @field between 100 and 249.9999 then round(@field,2,1) when @field < 100 then round(@field,3,2) end

250.36745更改为250.3,但250.04567返回250并且我需要250.0

1 个答案:

答案 0 :(得分:0)

返回给您的结果取决于@field的原始数据类型。我假设您没有为@field选择精确的数据类型(例如:float),因此得到一个变量结果。如果你想要一个精确的结果,那么你可以通过将case语句包装到类似的转换中来实现:

cast(case when @field >= 250 then round(@field, 1, 1)
          when @field between 100 and 249.9999
          then round(@field, 2, 1)
          when @field < 100 then round(@field, 3, 2)
     end as decimal(19, 1))

如果您仍然认为您从服务器返回250而不是250.0,那么我会询问您用于执行查询并显示结果的前端工具。在SSMS中,您肯定会回来250.0。但如果您使用的是其他客户,则结果可能会有所不同。