2011-12-09 69 views
0

需要从列中的字段(varchar2数据类型)中删除一个点。小数不总是在那里,但是当它是时,它总是在第五位,并且在它后面总是有两个零。 (12E4.00)我们需要保留零。从多个字段中删除小数

这似乎是REGEXP_REPLACE的合理使用,但不知道是否有纯粹的sql方式来完成它。 100,000行和28,000个嵌入了小数点的字段实例。

欣赏所有帮助流动。

+0

您需要保留0的?那么'12E4.00'变成'12E400'?你明白,这个数字乘以10倍到100次方,对吧?宇宙中只有10到80个能量原子? '12E400'是一个几乎不可能的大数目。 –

+0

谢谢你的回复,其实这是一个非科学的身份证,不是一个数字。 Varchar是数据类型。不是所有的都是E.可能是45K9.00 – user761758

+0

@ user761758如果它不是一个数字,那么这也不是一个“小数”,只是一个“点”字符。所以你只想从字符串中删除点字符,同时保留所有其他字符,对吗? –

回答

1

这听起来像你只需要一个简单的REPLACE

SQL> with x as (
    2 select '123E4.00' str from dual 
    3 union all 
    4 select '123K5.00' from dual 
    5 union all 
    6 select '123K123' from dual 
    7 ) 
    8 select replace(str, '.') 
    9 from x; 

REPLACE(
-------- 
123E400 
123K500 
123K123 

你需要将其转换成一个UPDATE声明对你的表

UPDATE some_table 
    SET some_column = REPLACE(some_column, '.') 
WHERE some_column != REPLACE(some_column, '.') 
+0

谢谢你的回复,一直没有能够得到它在表中的工作,而不是双重。表格列中有几千个不同的数值,其中有小数点,第五个数字后面跟着两个零。 – user761758

+0

WITH x AS(从t1选择(col_1),'123E4.00'str)从x选择替换(str,'。'),其中rownum <100;事实上,所有的确实匹配......谢谢!我们如何从完全匹配到所有可能性?再次,非常感谢。 – user761758

+0

@ user761758 - 你能解释一下“不起作用”吗?你有错误吗?有没有按照你想要的方式转换的具体价值?既然你有一个实际的表,你实际上并不需要我使用的'WITH'子句。只需针对您实际拥有的任何表格和列,运行“SELECT”即可。 –