从字符串中仅提取 0-9 数字
extract only 0-9 numbers from string
需要从 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*
尝试用空字符串替换模式 [^0-9]*
:
SELECT REGEXP_REPLACE('abc 123 456k', '[^0-9]*', '')
这应该去掉任何非数字字符,包括 空格。
需要从 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*
尝试用空字符串替换模式 [^0-9]*
:
SELECT REGEXP_REPLACE('abc 123 456k', '[^0-9]*', '')
这应该去掉任何非数字字符,包括 空格。