извлечь только 0-9 чисел из строки - PullRequest
1 голос
/ 08 мая 2019

Необходимо извлечь все числовые символы, то есть (0-9) из столбца varchar. Предположим, у нас есть данные типа abc 123 456k, тогда на выходе должно быть '123456', то есть нечисловые символы, включая пробелы для фильтрации. Я на Teradata версии 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*

1 Ответ

1 голос
/ 08 мая 2019

Попробуйте заменить шаблон [^0-9]* пустой строкой:

SELECT REGEXP_REPLACE('abc 123 456k', '[^0-9]*', '')

Это должно удалить любой нецифровый символ, , включая пробел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...