Преобразование в число из строки со специальными символами
У меня есть входной столбец со значениями ниже.
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-скрипки: