转换为有效的十进制数据类型

时间:2011-10-10 10:19:42

标签: sql sql-server sql-server-2005 tsql sql-server-2008

我有一个列[Cash] nvarchar(50),其数据稍后会在导入过程中转换为decimal(9,3),其中一些数据与正常查看的数值一致,例如 134.630, - 80.662 324.372。偶尔我会为数字值提供多个点的数据,例如1.324.372 and -2.134.630.是否有办法删除这个额外的点。

3 个答案:

答案 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]
来自....