语句:
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