只删除小数点后的零 sql 服务器 2012

Remove only zero after decimal sql server 2012

考虑以下数字。

7870.2
8220.0

如果值以 .0 结尾,我需要删除小数点。如果它以 .2 结尾,那么它应该保持原值。

我使用了 ceiling 但它删除了小数点后的所有值。

我如何编写一个 select 查询,我可以在其中为此添加一些条件?

下面是示例:

declare @1 decimal(4,3)
select @1 = 2.9

select case when SUBSTRING (PARSENAME(@1,1), 1, 1) = 0 then FLOOR(@1) else @1 end

将 select 语句中的 @1 更改为您的数据库字段名称。

sqlfiddle

case 语句中使用 right 并且:

DECLARE @val decimal(5,1)
SET @val =  7870.0

Select  
Case 
   When right(@val,1)<> '0' then
        cast(@val as varchar) 
   else 
        cast(cast(@val as int) as varchar)
End

输出:7870

编辑: 我可以写:

Case 
   When right(@val,1)<> '0' then
        @val 
   else 
        cast(@val as int) -- or floor(@val)
End

but 因为 case 语句的 return 类型是给定类型集中的 highest precedence 类型,所以第二个版本的输出是:7870.0不是 7870,这就是为什么我在 when 子句中将它转换为即 varchar,并且它可以在 case 语句之外转换,我的意思是 cast ((case when...then...else...end) as datatype)

一般来说,您应该在您的 dB 中这样做。这是一个应用程序或报告方面的操作。 dB用于存储和查询信息。它不是用来 format/string 操纵信息的。

解决方案似乎很简单:

SELECT CONVERT (FLOAT, PAYLOAD)

将数字转换为 float,使用 float(24) 提高精度:

DECLARE @t table(number decimal(10,1))
INSERT @t values(7870.2),(8220.0)

SELECT cast(number as float(24))
FROM @t

结果:

7870,2
8220