В своем регулярном выражении вы пытались использовать класс символов \s
в квадратных скобках []
. Это не работает (по крайней мере, не так, как ожидалось) - ваше регулярное выражение пытается сопоставить буквенные нули, обратные косые черты или буквы s.
Самое простое решение - избавиться от квадратных скобок и использовать выражение или с |
:
with v(value) as (
select '0000 00 00 ' from dual union all
select '0' || chr(9) || '00000000' from dual union all
select '000000000' || chr(10) from dual)
select value,
regexp_substr(value, '(0|\s)+') as mynum
from v
В качестве альтернативы вы можете использовать класс символов POSIX [:space:]
в квадратных скобках:
with v(value) as (
select '0000 00 00 ' from dual union all
select '0' || chr(9) || '00000000' from dual union all
select '000000000' || chr(10) from dual)
select value,
regexp_substr(value, '[0[:space:]]+') as mynum2
from v