我在表格中有以下值。
我需要在另一个表中存储第一个值(' aaaaaa'和#39; tmpfs')和第二个值(26和506)。我得到了第一个价值 CAST(substr(COL_1,1,InStr(COL_1,'') - 1)AS VARCHAR2(10))col
如何使用substring和instring获取第二个值,如26和506。?
答案 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