在预言机中使用 substr 和 instr 获取值



我在表中有以下值。

  1. aaaaaa 26G 2.0G 23G 8 tmp
  2. tmpfs 506M 0
  3. 506M 0/dev/shm

我需要将第一个值('aaaa'和'tmpfs'(和第二个值(26 和 506(存储在另一个表中。我得到了第一个价值CAST(substr(COL_1,1,InStr(COL_1,''(-1( AS VARCHAR2(10(( col

如何使用子字符串和字符串获取第二个值,例如 26 和 506。?

我会推荐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

有一个可选参数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+')

最新更新