从字符串中仅提取0-9个数字

时间:2019-05-08 11:09:16

标签: sql teradata teradata-sql-assistant

需要从varchar列中提取所有数字字符,即(0-9)。 假设我们有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 个答案:

答案 0 :(得分:1)

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

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

这应该删除任何非数字字符,包括 空格。