我有一个数据库的问题,其中一个用户输入一个十进制的逗号将频繁发生。我将努力纠正这个问题,但需要修正已经输入的100多条记录。它的正确位置和不正确的位置TSQL删除在某些条件下的小数
的混合小例子:
153.30
129.30
152.709
153.308
108.777
21.369
我想保留在小数表明美分的条目,并删除它应该是一个逗号看起来像小数点这样。
153.30
129.30
152709
153308
108777
21369
我有一个数据库的问题,其中一个用户输入一个十进制的逗号将频繁发生。我将努力纠正这个问题,但需要修正已经输入的100多条记录。它的正确位置和不正确的位置TSQL删除在某些条件下的小数
的混合小例子:
153.30
129.30
152.709
153.308
108.777
21.369
我想保留在小数表明美分的条目,并删除它应该是一个逗号看起来像小数点这样。
153.30
129.30
152709
153308
108777
21369
我想你会在这里遇到一个真正的困难,并且它可能是最快的,只需检查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
但对于那些以零结尾的,你自己。因此,修复数据,拍打用户的手腕,然后继续前进。
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可能会帮助找到需要更新的例子。
该列的数据类型是什么?如果它是小数点,并且用户最初输入“1.000”而不是“1,000”,则这将被存储为“1”,并且将无法知道这一点。同样,如果他们输入“1.230”而不是“1,230”,它将被存储为1.23' –
该列的数据类型为money,null – wildwally