2013-08-23 30 views
0

我有一个数据库的问题,其中一个用户输入一个十进制的逗号将频繁发生。我将努力纠正这个问题,但需要修正已经输入的100多条记录。它的正确位置和不正确的位置TSQL删除在某些条件下的小数

的混合

小例子:

153.30 
129.30 
152.709 
153.308 
108.777 
21.369 

我想保留在小数表明美分的条目,并删除它应该是一个逗号看起来像小数点这样。

153.30 
129.30 
152709 
153308 
108777 
21369 
+2

该列的数据类型是什么?如果它是小数点,并且用户最初输入“1.000”而不是“1,000”,则这将被存储为“1”,并且将无法知道这一点。同样,如果他们输入“1.230”而不是“1,230”,它将被存储为1.23' –

+0

该列的数据类型为money,null – wildwally

回答

2

我想你会在这里遇到一个真正的困难,并且它可能是最快的,只需检查100行并手动修复它们。这里的原因:

DECLARE @x TABLE(m MONEY); 

INSERT @x SELECT 153.30 UNION ALL SELECT 153.300; 

SELECT m FROM @x; 

结果:

m 
------ 
153.30 
153.30 

SQL Server将介绍这些给您相同。我找不到一种方法来转换为一个字符串(或二进制或任何其他类型),无论是隐式或显式,以告诉这两个值一旦到达表中。

现在,你可以将它缩小,对于三位小数是结束零:

DECLARE @x TABLE(m MONEY); 

INSERT @x SELECT 153.30 UNION ALL SELECT 153.300 
UNION ALL SELECT 153.309 UNION ALL SELECT 24.125; 

SELECT m FROM @x WHERE m * 1000 % 10 > 0; 

结果:

m 
------- 
153.309 
24.125 

但对于那些以零结尾的,你自己。因此,修复数据,拍打用户的手腕,然后继续前进。

1
create table #tt (value varchar(18)) 
insert into #tt select '153.30' 
insert into #tt select '152.709' 

select * from 
#tt 
where len(replace(substring(value,Charindex('.',value),999),'.','')) > 2 

我认为这可以帮助你,我用varchar类型做这个例子,使用convert可能会帮助找到需要更新的例子。