Преобразование в число из строки со специальными символами

У меня есть входной столбец со значениями ниже.

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|\.]]', '') 

Кто-нибудь может подсказать, как это сделать? а что я делаю не так? Я работаю над базой данных Oracle 11.2 с разработчиком pl/sql.

2 ответа

Используйте класс POSIX для сопоставления цифровых символов, т.е. [:digit:], Так что этот отрицательный класс [^[:digit:].] должен соответствовать любой символ, но не точка или цифра.

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;

Результат SQL-скрипки:

Другие вопросы по тегам