Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL如何从字符串中提取数字?_Sql_Oracle_Oracle Sqldeveloper - Fatal编程技术网

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

SQL如何从字符串中提取数字?,sql,oracle,oracle-sqldeveloper,Sql,Oracle,Oracle Sqldeveloper,我正在处理一个SQL查询,它应该能够从文本字符串的开头提取不同/随机长度的数字 文本字符串:666魔鬼号不是8888。 文本字符串:12345魔鬼号是我的PIN,即6666 我想加入一个专栏 666 12345 使用Substr和instr SELECT Substr (textstring, 1,instr(textstring,' ') - 1) AS Output FROM yourtable 结果: OUTPUT 666 12345 如果开头有文本,请使用此选项,例如aa12345

我正在处理一个SQL查询,它应该能够从文本字符串的开头提取不同/随机长度的数字

文本字符串:666魔鬼号不是8888。
文本字符串:12345魔鬼号是我的PIN,即6666

我想加入一个专栏

666
12345

使用
Substr
instr

SELECT Substr (textstring, 1,instr(textstring,' ') - 1) AS Output
FROM yourtable
结果:

OUTPUT
666
12345
如果开头有文本,请使用此选项,例如
aa12345 devils number is my PIN,即6666。
,因为它使用
REGEXP\u REPLACE
功能

SELECT REGEXP_REPLACE(Substr (textstring, 1,instr(textstring,' ') - 1), '[[:alpha:]]','') AS Output
FROM yourtable

SQL Fiddle:

此版本使用正则表达式,无论前面是否有文本,它都会为您提供第一个数字,并且不使用可怕的嵌套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>

您希望将数字作为字符串或数字返回吗?我想这无关紧要-我需要它用于Excel输出。
regexp\u substr(t\u列“^\d+”)