当前所在位置:珠峰网资讯 >> 计算机 >> Oracle认证 >> 正文
ORACLE删除同一字段中重复值函数
发布时间:2010/9/21 9:52:27 来源:深圳教育在线 编辑:well

  语句:

  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

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved