我有一个场景,我需要显示' - '如果值为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}]
请提出可以解决此问题的建议。尝试谷歌。
答案 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.001
? 11.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 -