我正在处理一个 SQL 查询,该查询应该能够从文本字符串开头提取不同 / 随机长度的数字。
文本字符串示例: 666恶魔数字不是8888。 12345恶魔数字是我的PIN码,即6666。
我希望在一列中得到这些数字。
文本字符串示例: 666恶魔数字不是8888。 12345恶魔数字是我的PIN码,即6666。
我希望在一列中得到这些数字。
666
12345
666
12345
使用Substr
和Instr
的组合
SELECT Substr (textstring, 1,instr(textstring,' ') - 1) AS Output
FROM yourtable
结果:
OUTPUT
666
12345
如果您需要处理文本开头的内容,例如aa12345 devils number is my PIN, that is 6666.
,可以使用此方法,它利用了REGEXP_REPLACE
函数。
SELECT REGEXP_REPLACE(Substr (textstring, 1,instr(textstring,' ') - 1), '[[:alpha:]]','') AS Output
FROM yourtable
SQL Fiddle: http://sqlfiddle.com/#!4/8edc9/1/0
这个版本使用了正则表达式,它可以给你第一个数字,无论它是否在文本之前,并且不使用可怕的嵌套的instr/substr调用:
SQL> with tbl(data) as (
select '666 devils number is not 8888' from dual
union
select '12345 devils number is my PIN, that is 6666' from dual
union
select 'aa12345 devils number is my PIN, that is 6666' from dual
)
select regexp_substr(data, '^\D*(\d+) ', 1, 1, null, 1) first_nbr
from tbl;
FIRST_NBR
---------------------------------------------
12345
666
12345
SQL>
regexp_substr(t_column, '^\d+')
- Patrick Bacon