如何从字符串中提取数字?SQL

4
我正在处理一个 SQL 查询,该查询应该能够从文本字符串开头提取不同 / 随机长度的数字。
文本字符串示例: 666恶魔数字不是8888。 12345恶魔数字是我的PIN码,即6666。
我希望在一列中得到这些数字。
666
12345

你想要返回数字作为字符串还是作为数字? - David W
我猜这不重要——我需要它用于 Excel 输出。 - HeadOverFeet
1
regexp_substr(t_column, '^\d+') - Patrick Bacon
2个回答

3

使用SubstrInstr的组合

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


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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接