条件十进制位置格式

时间:2017-08-07 13:31:35

标签: sql sql-server precision

我有一个场景,我需要显示' - '如果值为null,则数字数据(如果不为null)。我创建了一个处理这个问题的函数。下面是相同的剪辑。

@data=10258.69 and @roundUp=2 then @response=10258.69
@data=10258.00 and @roundUp=2 then @response=10258
@data=10258.695 and @roundUp=2 then @response=10258.70
@data=10258.69485 and @roundUp=2 then @response=10258.69

我需要回复如下

select cast(CAST(round(10028.000,3) as decimal(18,5)) as float)

我尝试过下面的条款,但在我的查询中没有用。

[{min: 0, max: 33},{min: 33, max: 66},{min: 66, max: 100}]

请提出可以解决此问题的建议。尝试谷歌。

3 个答案:

答案 0 :(得分:1)

您可以扩展case

set @response = (case when (@data is null) then '-'  
                      when (@data = floor(@data)) then str(@data, 25, 0)
                      else STR(@data,25,@roundUp) 
                 end);
return @response;

我会小心这一点,特别是如果@data存储为浮点数。您希望如何表示11.00111.0000001

你可能想要:

set @response = (case when (@data is null) then '-'  
                      when abs(@data - floor(@data)) < 0.001 then str(@data, 25, 0)
                      else STR(@data,25,@roundUp) 
                 end);
return @response;

答案 1 :(得分:0)

您可以使用这样的圆形和天花板功能。我告诉你,你希望如何将它融入你的代码中:

Select round(Ceiling(10000*10258.69)/10000,2)
Select round(Ceiling(10000*10258.00)/10000,2)
Select round(Ceiling(10000*10258.695)/10000,2)
Select round(Ceiling(10000*10258.69485)/10000,2)

答案 2 :(得分:0)

延迟回答,但如果是2012+,则另一个选项是Format()

示例

Declare @YourTable table (SomeCol float)
Insert Into @YourTable values
 (10258.69)
,(10258.00)
,(10258.695)
,(10258.69485)
,(null)

Select *
      ,Formatted = IsNull(Format(SomeCol,choose(sign(SomeCol-floor(SomeCol))+1,'0','0.00')),'-')
 From  @YourTable

<强>返回

SomeCol     Formatted
10258.69    10258.69
10258       10258
10258.695   10258.70
10258.69485 10258.69
NULL        -