我在表中有以下值。
- aaaaaa 26G 2.0G 23G 8 tmp tmpfs 506M 0
- 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+')