我有一些数据以nvarchar
的形式出现。显然,数据最初是从基于数字的数据类型转换而来的。例如,我的值为17.0000000
。我想删除这些尾随的零,以便它只是“17”。我确实需要varchar
或nvarchar
中的输出。
答案 0 :(得分:3)
您可以使用以下方法删除小数和零:
select (case when col like '%.0%' and col not like '%.%[^0]%'
then left(col, charindex('.', col) - 1)
when col like '%.%0'
then replace(rtrim(replace(col, '0', ' ')), ' ', '0')
else col
end)
注意:这假设该值是严格数字的(因此没有自己的空格)。
但是,我建议您将该值转换为适当的numeric
/ decimal
类型。
答案 1 :(得分:1)
如果2012 +
,还有另一种选择示例强>
Declare @YourTable Table ([StrValue] varchar(50))
Insert Into @YourTable Values
('17.00000')
,('17.10000')
,('.1')
,('.0')
,('Cat')
,('07/29/2017')
Select *
,NewVal = coalesce(convert(varchar(50),try_convert(float,StrValue)),StrValue)
From @YourTable
<强>返回强>
StrValue NewVal
17.00000 17
17.10000 17.1
.1 0.1
.0 0
Cat Cat
07/29/2017 07/29/2017
答案 2 :(得分:0)
SELECT LEFT('17.0000000',CHARINDEX('17.0000000','.')-1)
我在这里硬编码了这个值,但你要用你的列名
替换它答案 3 :(得分:0)
双重演员也将摆脱尾随零
select cast(cast('17.0000000' as float) as varchar)
union
select cast(cast('17.1000000' as float) as varchar)
结果
17
17.1
答案 4 :(得分:0)
使用case
的另一种方法可以是:
select col
, reverse( -- use reverse to find from right
substring(
reverse(col),
patindex( -- finding first char that is not `0`
'%[^0]%',
reverse(col)) +
patindex( -- finding first char that is not `.` after removing trailing `0`s
'%[^.]%',
substring( -- remove trailing `0`s
reverse(col),
patindex('%[^0]%', reverse(col)),
len(col)) + 'x') - 1, -- Note: I add `'x'` to avoid error
len(col)))
from t;