首页 > 数据库 >oracle 2个数组列,剔除数组重复的数据。

oracle 2个数组列,剔除数组重复的数据。

时间:2022-12-21 16:45:21浏览次数:38  
标签:12 数组 c0084 worktime 2022 oracle 剔除 id 21

一、下面这样不规则的,数据如何剔除掉。循环筛选replace替换掉。

序号        正常时间                     剔除时间

1    2022-12-19,2022-12-20,2022-12-21,2022-12-22,2022-12-23              2022-12-19,2022-12-23
2    2022-12-21,2022-12-22,2022-12-23,2022-12-24,2022-12-25              2022-12-23,2022-12-24,2022-12-25

二、得到的结果。

序号      剔除后的时间                        剔除时间

1    2022-12-20,2022-12-21,2022-12-22                          2022-12-19,2022-12-23
2    2022-12-21,2022-12-22                              2022-12-23,2022-12-24,2022-12-25

三、存储函数。

create or replace function F_WORKTIME(p_StartDate  varchar2,p_EndDate  varchar2, List   varchar2)
return  worktime_Table PIPELINED 
as
   v   WorkTime_ROW;
   id number;
   worktime DATE;
   stopworktime DATE;
   p_StopTimevarray VARCHAR2(100);
   stoparrays varchar2(200);
   workarraysAll VARCHAR2(100);
CURSOR cur IS  select 
                  t.c0084_id as id,
                  t.c0084_worktime as worktime,
                  t.c0084_stopworktime as stopworktimefrom t0084_apply_zy t  
                  inner join t0080_buildproject_zy t1
                  on t1.c0080_pjt_id=t.c0080_pjt_id 
                  inner join t0003_area t2
                  on t2.t0003_areaid=t1.c0003_stcode  
                  inner join T0511_USERINFO t0511 on
                  t1.c0080_logid=t0511.c0511_logid
                  where (t.c0084_state=7 or t.c0084_state=12 or t.c0084_state=14)
                  and p_StartDate>=substr(c0084_worktime,0,10) 
                  and p_EndDate<=substr(c0084_worktime,instr(c0084_worktime,',',-1,1)+1,10)
                  and t2.t0003_areaid in (select * from table(strtab(to_char(List))));              
CURSOR curstop IS select regexp_substr(p_StopTimevarray,'[^,]+',1,level) as stoparrays
from dual
connect by level<=length(p_StopTimevarray)-length(replace(p_StopTimevarray,','))+1;
begin
  for temp in cur loop
     p_StopTimevarray:=temp.stopworktime;
     workarraysAll:=temp.worktime;
                  for tempstop in curstop loop
                    if tempstop.stoparrays is not null then
                    workarraysAll:=replace(concat(workarraysAll,','),concat(tempstop.stoparrays,','));
                    end if;
                  
  end loop ;
         v := WorkTime_ROW(temp.id,trim(trailing ',' from workarraysAll));
         PIPE ROW (v);
     end loop;
   RETURN;
end F_WORKTIME;

 

标签:12,数组,c0084,worktime,2022,oracle,剔除,id,21
From: https://www.cnblogs.com/blue123/p/16996571.html

相关文章

  • 数组拷贝之arraycopy
      本文主要分两部分:手动实现数组拷贝功能使用并分析System类中的数组拷贝方法1.手动实现数组拷贝功能首先来看看我们的需求:有两个已知数组如上图,从src数组中拷......
  • 从对象数组中提取某些属性组成新的对象数组
    letarrold=[{name:"name1",age:"1",date:'2016-05-03'},{name:"name2",age:"2",date:'2016-05-02'},......
  • JavaScript中数组中的方法
    将数组转换成字符串JavaScript方法 toString() 把数组转换为数组值(逗号分隔)的字符串。实例: varfruits=["Banana","Orange","Apple","Mango"]; ......
  • C# Oracle数据库连接并执行类
    OracleHelper.cs usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Text;usingSystem.Data;usingSystem.Con......
  • 求平均成绩(数组)
    求平均成绩 TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):92502    AcceptedSubmission(s):21......
  • [vue] Vue监测数据改变的原理 对象,数组
    Vue监测对象数据改变的原理<divid="root"><h2>学校名称:{{name}}</h2><h2>学校地址:{{address}}</h2></div>constvm=newVue({el:'#root',data:{name:'尚硅谷......
  • JAVA数组
    JAVA数组定义数组是相同类型数据的有序集合声明创建dataType[]arrayRefVar=newdataType[arraySize];数组的声明是通过索引访问的获取数组长度:arrays.length......
  • 使用otter实现数据同步——mysql、oracle的数据同步利器
    文章目录Otter⽬前⽀持了什么整体架构环境准备下载安装修改配置⽂件运⾏ManagerNode配置⼀个同步任务添加canal添加数据源添加数据表配置添加⼀个chan......
  • 如何在 .Net 7 中将 Query 绑定到数组
    在.Net7中,我们可以通过绑定数组的方式来接收来自查询字符串的参数。这样就不需要再使用逗号分隔的字符串来获取参数了。代码演示假设我们需要从query上接受多个id......
  • Oracle数据库业务SQL优化实战-时间区间查询案例
    背景查询字段其实比较多,我选择聚焦在瓶颈点上,让我们开始吧功能背景简介:我们在一个进入数据中心的入口设置了一台记录人员进出的机器,由保卫员操作记录人员进出(通过换取通......