我有一个列[Cash] nvarchar(50)
,其数据稍后会在导入过程中转换为decimal(9,3)
,其中一些数据与正常查看的数值一致,例如 134.630, - 80.662 和 324.372。偶尔我会为数字值提供多个点的数据,例如1.324.372 and -2.134.630.
是否有办法删除这个额外的点。
答案 0 :(得分:1)
你可以;
select case when len(cash) - len(replace(cash, '.', '')) > 1 then
reverse(stuff(reverse(cash), charindex('.', reverse(cash)), 1, ''))
else
cash
end
from T
答案 1 :(得分:1)
declare @yourtable table(cash varchar(20))
insert @yourtable values('1.324.372')
insert @yourtable values('-2.134.630')
insert @yourtable values('1.234.567.89')
旧代码:
select reverse(replace(replace(stuff(reverse(cash), charindex(
'.', reverse(cash)), 1, ','), '.', ''), ',', '.'))
from @yourtable
稍微升级的代码(结果相同):
select reverse(stuff(reverse(replace(cash, '.', '')),
charindex('.', reverse(cash)), 1, '.'))
from @yourtable
结果:
1324.372
-2134.630
1234567.89
答案 2 :(得分:0)
创建一个包含具有适当值的计算字段的视图。
这样你仍然可以看到varchar值和相应的十进制值。
这样的事情:
选择
[现金],
施放(替换([现金],'。','')作为十进制)作为[CashDecimal]
来自....