sql - 从字符串中仅提取 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*
解决方案
尝试用[^0-9]*
空字符串替换模式:
SELECT REGEXP_REPLACE('abc 123 456k', '[^0-9]*', '')
这应该去掉任何非数字字符,包括空格。
推荐阅读
- python - 使用 Python 通过 shapefile 裁剪栅格
- c# - 有谁知道为什么Visual Studio 更新后不能设置断点?
- python - python:“缺少 1 个必需的位置参数:'self'”3 次中有 1 次?
- c - 比较 char* 的元素
- python - pip 找不到 tensorflow 2.0 或 2.1
- python - 在 Python 中使用 wget.download() 函数时,如果文件已经在输出目录中,如何防止下载
- node.js - 无法在 ubuntu 中的 nodejs 和 npm 中工作
- vue.js - Vue3在登录后或某个页面后添加全局插件
- javascript - 在 vuejs 中应用动态主题
- angular - 从数据库中检索信息的速度