TSQL在某些条件下删除小数

时间:2013-08-23 18:26:06

标签: sql-server-2005

我遇到一个数据库问题,用户输入了一个小数点,其中逗号会频繁出现。我将努力纠正未来的问题,但需要修复已输入的100多条记录。它是正确位置和错误位置的混合

小例子:

153.30
129.30
152.709
153.308
108.777
21.369

我想保留小数表示分数的条目,并删除小数点,它应该是逗号,如下所示。

153.30
129.30
152709
153308
108777
21369

2 个答案:

答案 0 :(得分: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 :(得分: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可能有助于找到需要更新的那些。