以小数位数删除0值

时间:2009-12-02 08:34:12

标签: sql decimal

我想问一下是否有人知道查询以十进制的方式删除0值。

例如:字段名称百分比具有这些值

百分比

770.00000000000000000000, 340.670000000000000000000, 96.00000000000000000000, 4400.56000000000000000000, 109.89000000000000000000, 109.00000000000000000000, 37.00000000000000000000,

目前我正在使用查询“select cast([Percent] as decimal(9,2))as [Percent] from table”并将导致

结果

770.00, 340.67, 96.00, 4400.56, 109.89, 109.00, 37.00,

我实际上想要结果: - >

770 340.67, 96, 4400.56, 109.89, 109, 37,

4 个答案:

答案 0 :(得分:2)

这个相当讨厌的TSQL可能只是做这个工作:

select 
  case 
    right(
       cast(cast([percent] as decimal(9,2)) as nvarchar(11))
    ,2)

    when '00' then cast(cast([percent] as int) as nvarchar(11)) as [percent]
    else cast(cast([percent] as decimal(9,2)) as nvarchar(11)) as [percent]

 end
from table

当然它总是返回一个字符串,但这是你的要求所固有的,你正在寻找一个值的表示......

我认为你应该将该表示推迟到更有意义的地方(report,datagrid?),并且你有更多工具(比如string.format kinda tools)来更好地完成工作。

答案 1 :(得分:1)

您可以使用DECIMAL和FLOAT的组合。首先将它向下舍入到2个deciaml位置,然后浮动以删除不需要的0的

e.g。

select cast(cast([Percent] as decimal(9,2)) AS FLOAT) as [Percent] 

以340.69999999999999为例,首先将它舍入到340.70,然后它将零点给你340.7。与任何舍入一样,精度将会丢失。

答案 2 :(得分:0)

你可能只是投射到FLOAT。

答案 3 :(得分:0)

您可以使用CONVERT两次功能,一次通过转换为浮动来放置0,一次转换为使用样式128

的varchar转换为varchar
DECLARE @Sample AS TABLE
    (
     SomeNumber DECIMAL(26, 12)
    )

INSERT INTO @Sample
    VALUES  ( 770.00000000000000000000 )
,           ( 340.670000000000000000000 )
,           ( 96.00000000000000000000 )
,           ( 4400.56000000000000000000 )
,           ( 109.89000000000000000000 )
,           ( 109.00000000000000000000 )
,           ( 37.00000000000000000000 )


SELECT CONVERT(VARCHAR(25), CONVERT(FLOAT, SomeNumber), 128) AS NoZeros
    FROM @Sample