0

我有一个具有以下值的输入列。

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 开发人员一起开发 Oracle 11.2 数据库。

4

2 回答 2

1

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

regexp_replace('%1.aa2', '[^[:digit:].]', '') 
于 2015-10-30T11:58:35.197 回答
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小提琴的结果:

在此处输入图像描述

于 2015-10-30T12:26:18.727 回答