从具有特殊字符的字符串转换为数字

时间:2015-10-30 11:49:16

标签: regex oracle11g regexp-replace regexp-substr

我有一个输入列,其值低于。

1.2%
111.00$
$100.00
aa
ss

预期输出

1.2
111.00
100.00
null
null

我正在尝试使用REGEXP_REPLACE并尝试替换不是数字的每个字符或"。"以便1.2%成为1.2。 这是我试过的查询,但这没有用。

regexp_replace('%1.aa2', '[^[\d|\.]]', '') 

有人可以建议怎么做吗?我做错了什么?我正在使用pl / sql developer开发Oracle 11.2数据库。

2 个答案:

答案 0 :(得分:1)

使用POSIX类匹配数字字符,即[:digit:]。所以这个否定的类[^[:digit:].]应匹配任何字符,但不能匹配点或数字。

regexp_replace('%1.aa2', '[^[:digit:].]', '') 

答案 1 :(得分:1)

您可以使用[^0-9.]正则表达式并替换为空字符串:

with testdata(txt) as (
  select 'ss' from dual
  union
  select 'aa' from dual
  union
  select '$100.00'      from dual
  union
  select '111.00$'             from dual
  union
  select '1.2%'             from dual
)
select regexp_replace(txt, '[^0-9.]', '')
from testdata;

SQL fiddle的结果:

enter image description here