ORACLE删除同一字段中重复值函数
来源:深圳教育在线 作者:well 时间:2010/9/21 9:52:27

  语句:

  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

免责声明:本文仅代表作者个人观点,与总裁世界无关。其原创性以及文中陈述内容的真实性、完整性、及时性本站不作任何保证或承诺,总裁世界对所有观点均保持中立态度,请读者仅作参考,并请自行核实相关内容。
网站首页 - 关于我们 - 版权声明 - 广告服务 - 网站地图 - 会员专区 - 客户服务 - 疑难解答 - 联系我们
总裁世界 版权所有Copyright © 2004 - 2017 www.ceoedu.com/www.ceoedu.com
总机电话:0755-88844436   业务联系:0755-83692700   中国·深圳 粤ICP备14047004号
客服咨询
24小时客服在线
马上咨询