在oracle中使用substr和instr获取值

时间:2017-05-22 01:09:26

标签: c# sql oracle

我在表格中有以下值。

  1. aaaaaa 26G 2.0G 23G 8 tmp
  2. tmpfs 506M 0 506M 0 / dev / shm
  3. 我需要在另一个表中存储第一个值(' aaaaaa'和#39; tmpfs')和第二个值(26和506)。我得到了第一个价值 CAST(substr(COL_1,1,InStr(COL_1,'') - 1)AS VARCHAR2(10))col

    如何使用substring和instring获取第二个值,如26和506。?

2 个答案:

答案 0 :(得分:0)

instr有一个可选参数,您可以在其中指定要搜索的特定字符串的第n次出现。

CAST(substr(COL_1,InStr(COL_1,' ',1,1)+1,InStr(COL_1,' ',1,2)-InStr(COL_1,' ',1,1)-1) AS VARCHAR2(10)) 

要仅从此子字符串中提取数字,请使用regexp_substr。这假设字母始终跟随一个或多个数字字符。

regexp_substr(CAST(substr(COL_1,InStr(COL_1,' ',1,1)+1,InStr(COL_1,' ',1,2)-InStr(COL_1,' ',1,1)-1) AS VARCHAR2(10)),'\d+')

答案 1 :(得分:0)

我建议regexp_substr()

select regexp_substr(col1, '[^ ]+ ', 1, 1) as first,
       regexp_substr(col1, '[^ ]+ ', 1, 2) as second

这将返回末尾带空格的值。我认为该模式在没有空间的情况下工作,因为在Oracle中正则表达式匹配是贪婪的:

select regexp_substr(col1, '[^ ]+', 1, 1) as first,
       regexp_substr(col1, '[^ ]+', 1, 2) as second