SQL Server删除字符串中小数点后的尾随零

时间:2013-09-20 19:37:45

标签: sql sql-server

我有以下变量:

DECLARE @test nvarchar(100)
SET @test =  'Prodcut A (Average: 1.000)'
SET @test =  'Prodcut B (Average: 2.3500)'

我的输出应该是:Prodcut A(Avegrage:1.0),Prodcut B(Avegrage:2.35)

如何从SQL Server中的nvarchar数据类型列中删除所有尾随零值? 我确信我必须使用SUBSTRING和CHARINDEX但不确定如何。有人可以帮助我吗?

我尝试了以下内容:

IF charindex('.', @test ) > 0 
   select  SUBSTRING(@test, PATINDEX('%[^0 ]%', @test+ ' '), LEN(@test))                    
End

5 个答案:

答案 0 :(得分:1)

您可以通过查看字符串来查找最后一个非'0'字符的位置,但这很麻烦。

需要注意的是,您可能会遇到偶然的浮点错误,这可以达到您想要的效果:

convert(varchar, convert(float, '123.40')) -- yields '123.4'
convert(varchar, convert(float, @test))

答案 1 :(得分:1)

如果结构始终相同,您可以使用以下内容:

Declare @a Table (test varchar(100))
Insert into @a Values ('Prodcut X ')
Insert into @a Values ('Prodcut A (Average: 1.000)')
Insert into @a Values ('Prodcut B (Average: 2.3500)')
Insert into @a Values ('Prodcut C (Average: 2.0510)')


Select  
Case When charindex('.', test ) > 0 then
   LEFT(test, LEN(test) + 1  - 
   Case When 
      PATINDEX('%[1-9]%', Reverse(test) + ' ')
    > PATINDEX('%[.]%', Reverse(test) + ' ')
    then PATINDEX('%[.]%', Reverse(test) + ' ') - 1
    else PATINDEX('%[1-9]%', Reverse(test) + ' ') 
    end 
    ) +')'
else test end
from @a

答案 2 :(得分:0)

假设

  

是。该列有时定义为NVARCHAR值   “平均值:”+数字+“)”

您可以将numberdecimal类型转换为float,因为float的打印时没有尾随零:

'Average:' + cast(number as float) + ')'

但是当decimal.作为分隔符且float类型具有{{1}时,存在一个已知的本地化问题(即某些非英语版本,例如俄语版本) }}。在这种情况下,您需要:

,

,即将逗号替换为点。

答案 3 :(得分:0)

试试这个

 DECLARE @test nvarchar(100)
SET @test =  'Prodcut A (Average: ' + CONVERT(VARCHAR,CAST(1.000 as float))+')'
SET @test =  'Prodcut B (Average: ' + CONVERT(VARCHAR,CAST(2.3500 as float))+')'
SELECT @test

答案 4 :(得分:0)

请尝试以下代码。

DECLARE @test nvarchar(100)
SET @test =  'Prodcut A (Average: ' + CONVERT(VARCHAR,CAST(1.000 as float))+')'

SELECT @test