2011-12-09 171 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」即可。 –