2011-11-18 149 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