Regex 从带有特殊字符的字符串转换为数字
我有一个包含以下值的输入列Regex 从带有特殊字符的字符串转换为数字,regex,oracle11g,regexp-replace,regexp-substr,Regex,Oracle11g,Regexp Replace,Regexp Substr,我有一个包含以下值的输入列 1.2% 111.00$ $100.00 aa ss 预期产量 1.2 111.00 100.00 null null 我尝试使用REGEXP\u REPLACE并尝试替换每个不是数字或“.”的字符,以便1.2%将变为1.2。 这是我尝试过的查询,但没有成功 regexp_replace('%1.aa2', '[^[\d|\.]]', '') 有人能建议怎么做吗?我做错了什么?我正在与pl/sql developer一起开发Oracle 11.2数据库。使用P
1.2%
111.00$
$100.00
aa
ss
预期产量
1.2
111.00
100.00
null
null
我尝试使用REGEXP\u REPLACE并尝试替换每个不是数字或“.”的字符,以便1.2%
将变为1.2
。
这是我尝试过的查询,但没有成功
regexp_replace('%1.aa2', '[^[\d|\.]]', '')
有人能建议怎么做吗?我做错了什么?我正在与pl/sql developer一起开发Oracle 11.2数据库。使用POSIX类匹配数字字符,即
[:digit:][/code>。所以这个被求反的类应该匹配任何字符,而不是点或数字
regexp_replace('%1.aa2', '[^[:digit:].]', '')
您可以使用[^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;
调查结果:
只需在模式中使用[^\d.]+
。这不起作用,它取代了除“.”之外的所有内容。这是我从DualSelect中使用的查询select regexp_replace('%1.aa2','[^\d.]+',''),我想在这种情况下您也必须转义反斜杠。尝试\\d
而不是\d
。这与“[^[\d.]”有什么不同?不知道oracle是否支持\d
。如果它支持,那么它将是[^\d.]
谢谢@Avinash raj。[:digit]工作正常。我确信oracle也支持'\d'。选中此语句,然后从dual中选择regexp_replace('asasas12313'、'\d'、'-')