单个字段屏蔽重复出现的字符串

mac2022-06-30  117

--NB的 case whencreate table test0518(n1 date,n2 varchar2(50));insert into test0518 values(sysdate,'0.11 0.12 0.11 0.14')insert into test0518 values(sysdate,'0.11');select n2,INSTR(n2, '0.11', 1, 1),INSTR(n2, '0.11', 1, 2) from test0518 ;--第一次修改  屏蔽重复出现的字符串 SELECT n1,n2,CASE WHEN INSTR(n2, '0.11', 1, 2) > 0 THEN SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) - 1)|| REPLACE(SUBSTR(n2,INSTR(n2, '0.11', 1, 2),LENGTH(n2)),'0.11','')else n2 end as xxxx  from test0518;N1                                               N2                                       XXXX------------------    -------------------------    -----------------2017/5/19 9:36:09                0.12 ,0.13 ,0.11 ,0.11            0.12 ,0.13 ,0.11 ,2017/5/18 9:26:06                0.11 ,0.12 ,0.11 ,0.14            0.11 ,0.12 , ,0.142017/5/18 9:26:09                0.11                                                0.112017/5/18 9:56:09                0.12 ,0.11 ,0.11 ,0.13            0.12 ,0.11 , ,0.13结果有点瑕疵,0.11 去掉了  但是剩下了 多余的  逗号--第二次修改 去除多余的逗号 SELECT n1,n2,CASE WHEN INSTR(n2, '0.11', 1, 2) > 0 THEN   --如果第二次出现的位置(13)>0 ,那么重复出现了  0.11 ,0.12 ,0.11 ,0.14  SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) - 1)||   --从左边一次性的截取到 13-1 位置 即:0.11 ,0.12 ,REPLACE(SUBSTR(n2,INSTR(n2, '0.11', 1, 2)/*13*/,LENGTH(n2)),'0.11 ,','')else n2 end as xxxx  from test0518;N1                                               N2                                       XXXX------------------    -------------------------    ------------------------2017/5/19 9:36:09                0.12 ,0.13 ,0.11 ,0.11            0.12 ,0.13 ,0.11 ,0.112017/5/18 9:26:06                0.11 ,0.12 ,0.11 ,0.14            0.11 ,0.12 ,0.142017/5/18 9:26:09                0.11                                                0.112017/5/18 9:56:09                0.12 ,0.11 ,0.11 ,0.13            0.12 ,0.11 ,0.13  --第三次修改 改为 update caseupdate test0518 set n5=CASE WHEN INSTR(n2, '0.11', 1, 2) > 0 THEN   --如果第二次出现的位置(13)>0 ,那么重复出现了  0.11 ,0.12 ,0.11 ,0.14  SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) - 1)||   --从左边一次性的截取到 13-1 位置 即:0.11 ,0.12 ,REPLACE(SUBSTR(n2,INSTR(n2, '0.11', 1, 2)/*13*/,LENGTH(n2)),'0.11 ,','')else n2 end ;--第四次修改 SELECT n1,n2,CASE   WHEN INSTR(n2, '0.11', 1, 2) > 0 AND INSTR(n2, '0.11', 1, 2)< LENGTH(N2)-3 THEN   --0.11 ,0.12 ,0.11 ,0.14        SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) - 1)||       REPLACE(SUBSTR(n2,INSTR(n2, '0.11', 1, 2)+6,LENGTH(n2)),'0.11,','')  WHEN INSTR(n2, '0.11', 1, 2) > 0 AND INSTR(n2, '0.11', 1, 2)=LENGTH(N2)-3 THEN  --0.12 ,0.13 ,0.11 ,0.11    SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) -2 )else N2 end as COL3                                                                --0.11  from test0518;N1                                               N2                                       XXXX------------------    -------------------------    ------------------------2017/5/19 9:36:09                0.12 ,0.13 ,0.11 ,0.11            0.12 ,0.13 ,0.11 2017/5/18 9:26:06                0.11 ,0.12 ,0.11 ,0.14            0.11 ,0.12 ,0.142017/5/18 9:26:09                0.11                                                0.112017/5/18 9:56:09                0.12 ,0.11 ,0.11 ,0.13            0.12 ,0.11 ,0.13--第五次修改 改为 update caseupdate test0518 set n6=CASE   WHEN INSTR(n2, '0.11', 1, 2) > 0 AND INSTR(n2, '0.11', 1, 2)< LENGTH(N2)-3 THEN   --0.11 ,0.12 ,0.11 ,0.14        SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) - 1)||       REPLACE(SUBSTR(n2,INSTR(n2, '0.11', 1, 2)+6,LENGTH(n2)),'0.11,','')  WHEN INSTR(n2, '0.11', 1, 2) > 0 AND INSTR(n2, '0.11', 1, 2)=LENGTH(N2)-3 THEN  --0.12 ,0.13 ,0.11 ,0.11    SUBSTR(n2, 1, INSTR(n2, '0.11', 1, 2) -2 )else N2 end ;

转载于:https://www.cnblogs.com/iyoume2008/p/6875431.html

最新回复(0)