软件开发公司建的数据库,其中有个字段,里面的字符串是用|分隔的例如aaa bbb ccc ddd
===================================
name1 350.00 AC|dfcc|370 TS
name2 552.21 CC|decc|560 LS
name3 410.22 F|bg|65 LZ这样的~现在要做加工。但是要把ccc字段中的字符串案|分隔的分别取出来做加工,要怎么样才能做到呢?
单纯用SQL语句可以么?还是有什么别的方法?
麻烦大家了
===================================
name1 350.00 AC|dfcc|370 TS
name2 552.21 CC|decc|560 LS
name3 410.22 F|bg|65 LZ这样的~现在要做加工。但是要把ccc字段中的字符串案|分隔的分别取出来做加工,要怎么样才能做到呢?
单纯用SQL语句可以么?还是有什么别的方法?
麻烦大家了
select 'name1', 350.00 ,'AC|dfcc|370', 'TS' from dual
union
select 'name2', 552.21 ,'CC|decc|560', 'LS' from dual
union
select 'name3', 410.22 ,'F|bg|65', 'LZ' from dual;SQL> select aaa,
2 bbb,
3 substr(ccc, st, decode(ed, 0, length(ccc), ed - st)) ccc,
4 ddd
5 from (select aaa,
6 bbb,
7 ccc,
8 ddd,
9 rn,
10 decode(rn, 1, 1, instr(ccc, '|', 1, rn - 1) + 1) st,
11 instr(ccc, '|', 1, rn) ed
12 from (select *
13 from tt_30,
14 (select rownum rn
15 from dual
16 connect by rownum <=
17 (select max(length(ccc)) -
18 max(length(replace(ccc, '|', ''))) + 1
19 from tt_30))))
20 where ed > 0
21 or st > 1
22 order by aaa,rn;AAA BBB CCC DDD
-------------------- ---------- ---------------------------------------- -------
name1 350 AC TS
name1 350 dfcc TS
name1 350 370 TS
name2 552.21 CC LS
name2 552.21 decc LS
name2 552.21 560 LS
name3 410.22 F LZ
name3 410.22 bg LZ
name3 410.22 65 LZ已选择9行。
substr(ccc,1,instr(ccc,'|')-1) as ccc1/*第一部分*/,
substr(substr(ccc,instr(ccc,'|')+1),1,instr(substr(ccc,instr(ccc,'|')+1),'|')-1) as ccc2/*第2部分*/
from table1
第3部分 你自已写吧。
不然只能局部解决你的问题
如果你这里用|分割的个数是固定的话,可以用2楼的这个方法。如果是不固定,就需要写个split的function了。2楼的connect by用的好强