将varchar转换为数字

时间:2011-11-18 06:43:35

标签: sql oracle select insert

我有一个困扰我的问题。当varchar值包含字母表时,如何将varchar转换为数字。

对于我的varchar price列值:

14dollars10cents
15dollars20cents

通过将其转换为varchar到number price列,值应为:

1410
1520

我知道如果varchar不包含任何字母,它可以通过“

自动转换
SELECT CONVERT(INT, PRICE) FROM Table

有没有办法摆脱中间的字母,因为我想对它做数学函数。

更新了定点号码的尝试:

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

由于

4 个答案:

答案 0 :(得分: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;

...瞧

答案 1 :(得分:2)

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

这个问题是,如果varchar仍然包含字母数字字符,它将会中断。

答案 2 :(得分:0)

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

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

答案 3 :(得分:-2)

不,我不认为有直接的方法。 你可以进行字符串解析来获得整数值。