在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
答案 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
。但如果您使用的是其他客户,则结果可能会有所不同。