【问题标题】:extract only 0-9 numbers from string从字符串中仅提取 0-9 个数字
【发布时间】:2019-09-26 02:34:42
【问题描述】:

需要从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*

【问题讨论】:

  • 当你运行REGEXP_REPLACE('abc 123 456k', '[^0-9 ]*', '')时,输出是什么?
  • 我们得到了数字,但空格仍然存在。 123456 789 678123 123 456 123456 789

标签: sql teradata teradata-sql-assistant


【解决方案1】:

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

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

这应该去掉所有非数字字符,包括空格。

【讨论】:

    猜你喜欢
    • 2010-10-25
    • 2021-07-18
    • 2019-09-14
    • 2015-10-04
    • 2021-01-08
    • 2021-11-14
    • 2016-12-13
    • 2021-07-28
    • 1970-01-01
    相关资源
    最近更新 更多