zoukankan      html  css  js  c++  java
  • 单个字段屏蔽重复出现的字符串

    --NB的 case when
    create 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.14
    2017/5/18 9:26:09                0.11                                                0.11
    2017/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.11
    2017/5/18 9:26:06                0.11 ,0.12 ,0.11 ,0.14            0.11 ,0.12 ,0.14
    2017/5/18 9:26:09                0.11                                                0.11
    2017/5/18 9:56:09                0.12 ,0.11 ,0.11 ,0.13            0.12 ,0.11 ,0.13

     


    --第三次修改 改为 update case
    update 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.14
    2017/5/18 9:26:09                0.11                                                0.11
    2017/5/18 9:56:09                0.12 ,0.11 ,0.11 ,0.13            0.12 ,0.11 ,0.13




    --第五次修改 改为 update case
    update 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 ;

  • 相关阅读:
    二进制运算
    python魔法函数__dict__和__getattr__的妙用
    logging模块配置笔记
    一个python爬虫工具类
    和我一起学爬虫(一)
    不一样的谷歌搜索
    CentOS6.4安装辅助NIS的流程
    ROS6.16开始支持802.11ac了,扫盲下
    centos 安装 Splunk
    扫盲贴2.5寸移动硬盘的厚度有几种
  • 原文地址:https://www.cnblogs.com/iyoume2008/p/6875431.html
Copyright © 2011-2022 走看看