在Oracle 9i中$ readlink -f $(which sh)
/bin/dash
$ type sh
sh is /bin/sh
是否具有等效功能。
我知道regexp_substr
始于Oracle 10g。
试图找出一种方法,可以在Oracle 9i中使用相同的函数逻辑。
我有类似
的数据regexp_substr
我想通过使用/分隔字符串来分别选择值。
我尝试使用0/6/03/19
0/6/3/19
0/1/3/09
和substr
,但是它不是通用的,因为斜线之间的字符串长度可以改变。
答案 0 :(得分:0)
很遗憾,您只能将instr
和substr
组合用作:
with t as
(
select '0/6/03/19' as str from dual union all
select '0/6/3/19' from dual
)
select substr(str,1,instr(str,'/',1,1)-1) str1,
substr(str,instr(str,'/',1,1)+1,instr(str,'/',1,2)-instr(str,'/',1,1)-1) str2,
substr(str,instr(str,'/',1,2)+1,instr(str,'/',1,3)-instr(str,'/',1,2)-1) str3,
substr(str,instr(str,'/',1,3)+1,length(str)-instr(str,'/',1,3)) str4
from t;
STR1 STR2 STR3 STR4
---- ---- ---- ----
0 6 03 19
0 6 3 19
P.S。如果您的数据库版本为9.2,则可以像上面那样使用with .. as
结构。
您还可以按无误方式以行方式获得结果 :
with t as
(
select '/'||str||'/' as str, ID
from
(
select 1 as ID, '0/6/03/19' as str from dual union all
select 2,'0/6/3/19' from dual
)
)
select
distinct ID, level as piece_nr,
substr(str,instr(str,'/',1,level)+1,instr(str,'/',1,level+1)-instr(str,'/',1,level)-1)
as piece_value
from ( select * from t )
connect by level <= length(str)-length(replace(str,'/',''))-1
order by ID, level;
ID PIECE_NR PIECE_VALUE
-- -------- -----------
1 1 0
1 2 6
1 3 03
1 4 19
2 1 0
2 2 6
2 3 3
2 4 19