分割字符串問(wèn)題
?
?
?
?
怎樣支掉字符串中逗號(hào)間重復(fù)的字符
如 ',1,2,5,9,1,2,5,9,1,2,9,1,2,9,1,2,3,9,1,2,3,9,1,2,9,1,2,9,1,2,3,9,1,2,3,9,'怎樣支掉字符串中逗號(hào)間重復(fù)的字符,并將字符升序排列,得到
',1,2,3,5,9,'
百思不得其解,是高手的試一下。
?
解答:
select col from(
select sys_connect_by_path(col,',')||',' col,level from(
select col,row_number() over(order by rownum) rn from (
select distinct substr(col,instr(col,',',1,rownum)+1,instr(col,',',1,rownum+1)-instr(col,',',1,rownum)-1) col from (
select ',1,2,5,9,1,2,5,9,1,3,9,' col from dual
) connect by rownum<length(translate(col,','||col,','))
)
)
connect by prior rn = rn -1 order by level desc
) where rownum=1
?
?
?
?
?
要求用pl/sql寫(xiě)一個(gè)函數(shù), 實(shí)現(xiàn)根據(jù)分割符把原字符串分成若干個(gè)字符串功能.
輸入: string(字符串) 和 Delimiter (分隔符)
輸出: substr1, ..., substrn (根據(jù)分割后的字符串排序, 不是子串在原字符串中的順序)
?
解答:
select substr(col,instr(col,',',1,rownum)+1,instr(col,',',1,rownum+1)-instr(col,',',1,rownum)-1) col from (
select ',1,2,5,9,1,2,5,9,1,3,9,' col from dual
) connect by rownum<length(translate(col,','||col,','))
?
?
?
?
?
?
分割串問(wèn)題
?
?
我現(xiàn)在表有個(gè)字段是ids并且以@@分割,例如@@123@@234@@567@@.
?
現(xiàn)在有一個(gè)select id from project查出來(lái)的結(jié)果集(如查出來(lái)id是123,234,555)現(xiàn)在我想用like匹配這個(gè)結(jié)果集,只要@@123@@234@@567@@.有一個(gè)id匹配出來(lái)出的結(jié)果集就OK
?
SQL> select * from tt;
?
ID
------------------------------------------------------------
@@aa@@bb@@cc@@
@@aaa@@bbb@@ccc@@
?
SQL> create or replace type t_object as object(
2 id varchar2(60),
3 sub_id varchar2(60)
4 );
?
Type created
?
SQL> create type t_ret_table is table of t_object;
?
Type created
?
SQL> create or replace function f_test(var_str in varchar2) return t_ret_table PIPELINED
2 as
3 var_tmp varchar2(60);
4 var_element varchar2(60);
5 begin
6 for i in (select rtrim(ltrim(id,'@@'),'@@') id from tt) loop
7 var_tmp := i.id;
8 while instr(var_tmp,'@@')>0 loop
9 var_element := substr(var_tmp,1,instr(i.id,'@@')-1);
10 var_tmp := substr(var_tmp,instr(i.id,'@@')+2,length(var_tmp));
11 pipe row(t_object(i.id,var_element));
12 end loop;
13 pipe row(t_object(i.id,var_tmp));
14 end loop;
15 return;
16 end f_test;
17 /
?
Function created
?
SQL> select id from table(f_test('a')) where sub_id in (select col from (select 'aa' col from dual union select 'bbb' col from dual union select 'ccc' from dual)) group by id;
?
?
SQL>select * from table(f_test('a'));
?
?
6 rows selected.
?
?
?
SQL>select id from table(f_test('a')) where sub_id in (
select substr(col,instr(col,',',1,rownum)+1,instr(col,',',1,rownum+1)-instr(col,',',1,rownum)-1) col from (
select ','||'aa,aaa,bbb'||',' col from dual
) connect by rownum<length(translate(col,','||col,','))
)
group by id
-The End-