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

时间:2015-06-24 13:12:12

标签: sql oracle oracle-sqldeveloper

我正在使用SQL进行查询,该查询应该能够从文本字符串的开头提取不同/随机长度的数字。

文字字符串:666个恶魔号码不是8888 文字字符串:12345恶魔号码是我的PIN码,即6666。

我想进入专栏

git clone https://github.com/wso2/siddhi.git

2 个答案:

答案 0 :(得分:3)

使用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小提琴:http://sqlfiddle.com/#!4/8edc9/1/0

答案 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>