我有一个输入列,其值低于。
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数据库。
答案 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的结果: