首页 > 解决方案 > 从字符串中仅提取 0-9 个数字

问题描述

需要从varchar列中提取所有数字字符,即 (0-9)。假设我们有类似的数据abc 123 456k,那么输出应该是'123456',即包括空格在内的非数字字符被过滤掉。我使用的是 Teradata 版本 15.10。

我用过REGEXP_SUBSTR(ATRB_7_VAL, '[0-9]+')and 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*

标签: sqlteradatateradata-sql-assistant

解决方案


尝试用[^0-9]*空字符串替换模式:

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

这应该去掉任何非数字字符,包括空格。


推荐阅读