只删除小数点后的零 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 更改为您的数据库字段名称。
在 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
考虑以下数字。
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 更改为您的数据库字段名称。
在 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