2011-11-18 194 views
3

我有一個困擾我的問題。如何在varchar值由字母組成的情況下將varchar轉換爲數字。將varchar轉換爲數字

對於我VARCHAR價格列值:

14dollars10cents 
15dollars20cents 

通過將其轉換爲VARCHAR到數價格列,其值應爲:

1410 
1520 

我知道,如果將varchar不包括任何字母,它可以自動通過」轉換

SELECT CONVERT(INT, PRICE) FROM Table 

有沒有辦法擺脫的一個因爲我想在它上面做數學函數,所以在中間的lphabets。

更新投入定點數的嘗試:

SELECT CAST (Replace(REPLACE(PRICE, 'dollars', '.'),'cents','') AS Number(4,2))) 
FROM TEST; 

感謝

+0

是否修正了位置?然後,子串操作將起作用。否則,使用正則表達式來刪除所有非數字。 – Thilo

+0

請在http://delphi.about.com/od/objectpascalide/a/curr2words.htm中檢查一次 –

+0

您好位置不固定。 dinup提供的解決方案將不起作用,因爲formatfixedpoint只對某些字符串可用。 – JLearner

回答

1
SELECT CAST(REPLACE(YourVarcharCol, 'dollars', '') AS INT) FROM Table 

問題在於,如果varchar仍包含字母數字字符,它將中斷。

+0

好吧,我已經從您給出的解決方案中進行了測試。它給了我一個無效號碼的錯誤。當我選擇cast(從測試 – JLearner

+0

中替換(price,'dollars','cents')作爲數字)我已經更新了當前我已經完成的解決方案。是否可以設置3個值?因爲我的表數據由空值組成 – JLearner

+0

...你試圖用'仙'改變'美元'首先你需要改變'美元'用'' 試試SELECT CAST(REPLACE(REPLACE(YourVarcharCol,'dollars',''),'cents','') AS INT)FROM表 – adam2510

-2

不,我不認爲有直接的方式。 你可以做字符串解析來獲得你的整數值。

+0

你能舉一個例子說明如何進行字符串解析來獲得任何整數值嗎?謝謝 – JLearner

+0

檢查:http://www.ibm.com/developerworks/data/library/techarticle/0303stolze/0303stolze1.html – Sandip

+0

有一個問題,我不能創建功能,由於管理員權限。還有其他方法嗎? – JLearner

3

你可以只使用REGEXP_REPLACE刪除所有非數字字符:

SELECT REGEXP_REPLACE(price, '[^[:digit:]]') 
    FROM table; 

爲了然後將其轉換爲一個數字:

SELECT TO_NUMBER(REGEXP_REPLACE(price, '[^[:digit:]]')) 
    FROM table; 

如果你想在加的地步,那麼你可以做與REGEXP_REPLACE太:

SELECT TO_NUMBER(REGEXP_REPLACE(val, '^([0-9]*)([^[:digit:]]*)([0-9]*)(.*)$', '\1.\3')) 
    FROM table; 

瞧...

0

如何使用translate去除不需要的字符。

SELECT TO_NUMBER(TRANSLATE('14dollars10cents','1234567890dolarscents','1234567890')) FROM DUAL