大家好,若在一張表中,有1;1;2;2;3;4這些資料,請問如何通過回圈去除重復資料后得到1;2;3;4的結果?
最好通過SP(存盤程序)得到這個結果。
uj5u.com熱心網友回復:
請給出測驗資料,和你的預期結果;uj5u.com熱心網友回復:
表A:1;1;2;2;3;4
表B:
1;2;3;4
請問如何把表A的資料通過回圈去重后得到表B的資料?
uj5u.com熱心網友回復:
表A:
1;1;2;2;3;4
表B:
1;2;3;4
請問如何把表A的資料通過回圈去重后得到表B的資料?
uj5u.com熱心網友回復:
為什么一定要用回圈呢?效率也不一定好
用DISTINCT 也不錯一條陳述句搞定
也可以用ROW_NUMBER函式
uj5u.com熱心網友回復:
SQL> with tt as(2 select 1 as id from dual union all
3 select 1 as id from dual union all
4 select 2 as id from dual union all
5 select 2 as id from dual union all
6 select 3 as id from dual union all
7 select 3 as id from dual union all
8 select 3 as id from dual)
9 select t.id from
10 (select id,row_number() over(partition by id order by 1) rn from tt) t
11 where t.rn=1;
ID
----------
1
2
3
uj5u.com熱心網友回復:
SQL> with tt as(
2 select 1 as id from dual union all
3 select 1 as id from dual union all
4 select 2 as id from dual union all
5 select 2 as id from dual union all
6 select 3 as id from dual union all
7 select 3 as id from dual union all
8 select 3 as id from dual)
9 select t.id from
10 (select id,row_number() over(partition by id order by 1) rn from tt) t
11 where t.rn=1;
ID
----------
1
2
3
謝謝,我只是想用回圈實作這個功能,用plsql實作,最好是用SP來完成這個操作
uj5u.com熱心網友回復:
create or replace function ZH_SPLIT(v_string in varchar2, --輸入字串v_delimiter in varchar2) --輸入分隔符
/*
去除一個字串中重復的資料,例如:a,a,a,b,c,c輸出a,b,c
*/
return varchar2 is
j int := 0;
i int := 1;
len_string int := 0;
len_delimiter int := 0;
str varchar2(4000);
v_return varchar2(4000);
begin
len_string := LENGTH(v_string);
len_delimiter := LENGTH(v_delimiter);
while j < len_string loop
j := INSTR(v_string, v_delimiter, i);
if j = 0 then
j := len_string;
str := SUBSTR(v_string, i);
if instr(v_return, str) > 0 then
null;
else
v_return := v_return || str || ',';
end if;
if i >= len_string then
exit;
end if;
else
str := SUBSTR(v_string, i, j - i);
i := j + len_delimiter;
if instr(v_return, str) > 0 then
null;
else
v_return := v_return || str || ',';
end if;
end if;
end loop;
v_return := substr(v_return, 1, length(v_return) - 1);
return v_return;
end;
------------------------------------------
select ZH_SPLIT('a,b,b,c,c,d',',') from dual
a,b,c,d
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/112115.html
標籤:開發
上一篇:求助!登陸出現ORA-01034、ORA-27101錯誤
下一篇:oracle觸發器,改成存盤程序
