Необходимо извлечь все числовые символы, например (0–9), из столбца varchar
.
предположим, что у нас есть такие данные, как abc 123 456k
, тогда вывод должен быть «123456», то есть нечисловые символы, включая пробелы, которые необходимо отфильтровать.
У меня Терадата версии 15.10.
Я использовал REGEXP_SUBSTR(ATRB_7_VAL, '[0-9]+')
и REGEXP_REPLACE(ATRB_7_VAL,'[^0-9 ]*','')
, но оба не дают желаемого результата.
create multiset volatile table abc
(
ATRB_7_VAL varchar(100)
)
on commit preserve rows;
insert into abc (
'abc 123 456 xyzabck'
);
insert into abc (
'123456 789k'
);
insert into abc (
'123456 789k 678-123*'
);
select ATRB_7_VAL
,REGEXP_SUBSTR(ATRB_7_VAL, '[0-9]+') as val1
,REGEXP_REPLACE(ATRB_7_VAL,'[^0-9 ]*','') as val2
from abc;
ожидаемый результат
123456
123456789
123456789678123
Фактический результат с REGEXP_SUBSTR(ATRB_7_VAL, '[0-9]+')
val1
123
123456
123456
фактический результат с REGEXP_REPLACE(ATRB_7_VAL,'[^0-9 ]*','')
val2
123 456 xyzabck
123456 789k
123456 789k 678-123*
мы получаем числа, но пробелы все еще там. 123456 789 678123 123 456 123456 789
Попробуйте заменить шаблон [^0-9]*
пустой строкой:
SELECT REGEXP_REPLACE('abc 123 456k', '[^0-9]*', '')
Это должно удалить любой нецифровой символ, пробел включая.
Когда вы запускаете
REGEXP_REPLACE('abc 123 456k', '[^0-9 ]*', '')
, что выдает?