我的目的是:将 字段拆分成n个节点,用多列的方式显示出来。 ----------脚本 drop table t1;
create table t1( NAME varchar2(10), PATH varchar2(200) );
Insert Into T1(NAME,PATH) values('A', 'X2-Y3'); Insert Into T1(NAME,PATH) values('B', 'U&-V-W-V'); Insert Into T1(NAME,PATH) values('C', 'M4');
commit;
创建一个视图 V1 ,期望结果 select * from V1 如下:
Name NO Node ------ -------- A 1 X2 A 2 Y3 B 1 U& B 2 V B 3 W B 4 V Z 1 M4
问题:这个视图怎么写?
yaozw_mountain(山林) 再帮忙看看啊
原来我意思看错了,是字符串切割问题 第一种方法,使用自定义表函数,实现类似: select t.*, c.c from t, table(f_sep(t.a))c 这种比较通用方法二:字符串切割 select a.*, r, substr(code, Instr('-'||code||'-','-', 1, r ), Instr('-'||code||'-','-', 1, r +1 ) - Instr('-'||code||'-','-', 1, r ) -1 )v from tb1 a,( SELECT ROWNUM r FROM All_Objects WHERE ROWNUM <=30 --取最大可能数 )b WHERE Instr('-'||code||'-', '-', 1, r +1 )>0
from tb1 a,(
SELECT chr(64+ROWNUM) v FROM All_Objects WHERE ROWNUM <=26
)b
where b.v between substr(a.code,1,1) and substr(a.code,-1)
但是 code 的值有时候是这样的‘32-17&-61-CB’
,
不过提供了思路,谢谢!我再另外构建B表
----------脚本
drop table t1;
create table t1(
NAME varchar2(10),
PATH varchar2(200)
);
Insert Into T1(NAME,PATH) values('A', 'X2-Y3');
Insert Into T1(NAME,PATH) values('B', 'U&-V-W-V');
Insert Into T1(NAME,PATH) values('C', 'M4');
commit;
创建一个视图 V1 ,期望结果 select * from V1 如下:
Name NO Node
------ --------
A 1 X2
A 2 Y3
B 1 U&
B 2 V
B 3 W
B 4 V
Z 1 M4
问题:这个视图怎么写?
第一种方法,使用自定义表函数,实现类似:
select t.*, c.c from t, table(f_sep(t.a))c
这种比较通用方法二:字符串切割
select a.*, r,
substr(code, Instr('-'||code||'-','-', 1, r ),
Instr('-'||code||'-','-', 1, r +1 ) - Instr('-'||code||'-','-', 1, r ) -1 )v
from tb1 a,(
SELECT ROWNUM r FROM All_Objects WHERE ROWNUM <=30 --取最大可能数
)b
WHERE Instr('-'||code||'-', '-', 1, r +1 )>0