ORACLE-刪除同一欄位中重複值函數

來源:互聯網
上載者:User

有時候我們可能需要將查詢得到的結果進行重複值的篩選,例如我們用下面的SQL語句查詢出結果

語句:

Select SEQ_NO,REPORT_NO from Imp_Report

 

結果:

SEQ_NO    REPORT_NO
-------------------------------
N320410A091130000600   320410109092905,320410109093647,320410109095568,320410109093647
N320410A091130000601   320410109096320,320410109097222,320410109097222

 

實際想要的結果:

SEQ_NO    REPORT_NO
-------------------------------
N320410A091130000600   320410109092905,320410109093647,320410109095568
N320410A091130000601   320410109096320,320410109097222

 

我自己研究寫了個函數

SQL語句

 1 CREATE OR REPLACE FUNCTION FUN_IMP_REPORT_EXCLUDE_REPEAT(Report_No IN NVARCHAR2)
 2   RETURN NVARCHAR2 IS
 3   StrReportNo  NVARCHAR2(2000);
 4   StrTemp      NVARCHAR2(2000);
 5   TempReportNo NVARCHAR2(2000);
 6 BEGIN
 7   StrReportNo  := '';
 8   StrTemp      := '';
 9   TempReportNo := Report_No;
10   LOOP
11     --判斷參數有沒有值
12     IF INSTR(TempReportNo || ',', ',', 1, 1) > 1 THEN
13       --以','分隔截取欄位
14       StrTemp := SUBSTR(TempReportNo,
15                         1,
16                         INSTR(TempReportNo || ',', ',', 1, 1) - 1);
17     END IF;
18     --判斷是否已經存在相同值,這裡前後一定要加分隔字元
19     IF INSTR(',' || StrReportNo || ',', ',' || StrTemp || ',', 1, 1) = 0 THEN
20       --累加不同結果
21       StrReportNo := StrReportNo || ',' || StrTemp;
22     END IF;
23     --將判斷過的欄位刪除掉
24     TempReportNo := SUBSTR(TempReportNo,
25                            INSTR(TempReportNo || ',', ',', 1, 1) + 1);
26     --參數所有值完成過濾判斷後跳出迴圈
27     EXIT WHEN length(TempReportNo) = 0 or TempReportNo is null;
28   END LOOP;
29   RETURN SUBSTR(StrReportNo, 2); --累加時其實是以','開始的
30 END FUN_IMP_REPORT_EXCLUDE_REPEAT;

  

最終的SQL語句:

Select SEQ_NO,FUN_IMP_REPORT_EXCLUDE_REPEAT(REPORT_NO) from Imp_Report

                                                                                                                                                    

  Agoni  2009-12-29        

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.