我有以下变量:
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
答案 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值 “平均值:”+数字+“)”
您可以将number
从decimal
类型转换为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