我有一组十进制值,但如果它们为零,我需要删除小数点后的值。
17.00
23.50
100.00
512.79
成为
17
23.50
100
512.79
目前,我转换为字符串并替换尾随.00
- 有更好的方法吗?
REPLACE(CAST(amount as varchar(15)), '.00', '')
答案 0 :(得分:0)
这听起来像纯粹是一个数据表示问题。因此,您应该让接收应用程序或报告软件处理格式化。
您可以尝试将.00s转换为数据类型int
。这会截断小数。但是,由于所有值都出现在一列中,因此它们必须具有相同的类型。将所有内容设为int
会使实际小数位破坏您的行。
作为演示问题的SQL解决方案,我认为你所拥有的就是好的。
答案 1 :(得分:0)
我建议你将原始十进制值与其自身进行比较。示例代码:
declare
@Val1 decimal(9,2) = 17.00,
@Val2 decimal(9,2) = 23.50;
select
case when FLOOR ( @Val1 ) = @Val1
then cast( cast(@Val1 as int) as varchar)
else cast(@Val1 as varchar) end,
case when FLOOR ( @Val2 ) = @Val2
then cast( cast(@Val2 as int) as varchar)
else cast(@Val2 as varchar) end
-------------
17 | 23.50