• oracle截取字符串区间段的一部分字符串


    Oracle SQL中实现indexOf和lastIndexOf功能,substr和instr用法  
    博客分类: oracle
    PL/SQL
     
    instrsubstrlastindexofindexoforacle .
    
    Oracle SQL中实现indexOf和lastIndexOf功能 
    
    Oracle, SQL, indexOf, lastIndexOf 
    今天遇到一个问题,需要将一个格式为1_2_3这样的字符串拆解组成1_3的串,并用SQL更新数据库。 
    在Oracel中,可以用substr和INSTR函数来实现此功能。 
    
    substr的第三个参数为1时,实现的是indexOf功能。 
    substr的第三个参数为-1时,实现的是lastIndexOf功能。 
    
    最后的SQL语句如下: 
    update ebms_data_table t set t.ref_name = substr(t.name, 0, INSTR(t.name, '_', 1, 1))|| substr(t.name, INSTR(t.name, '_', -1, 1)+1); 
    
    
    (二) 
    再给大家举个例子: 
    
    select 
           i1.name, 
           instr(i1.name, '', 1) + 1 as 公司出现的位置, 
           instr(i1.name, '分公司', 1) as 分公司出现的位置, 
           substr(i1.name, 
                  instr(i1.name, '司', 1) + 1, 
                  ((instr(i1.name, '分公司', 1)) - (instr(i1.name, '司', 1) + 1))) as subname 
      from insurance_company1 i1 
     where i1.name like '%股份有限公司%分公司' 
       and i1.upcustomer like '%股份有限公司' 
    
    查询结果如下: 
    
    
            名字全称                             司出现的位置        分公司出现的位置          subName 
    1   天安保险股份有限公伊犁分公司                   11             13                     伊犁 
    2   中国大地财产保险股份有限公新疆分公司	        15             17                 新疆 
    3   中国平安财产保险股份有限公乌苏分公司	        15             17                     乌苏 
    4   中国平安财产保险股份有限公新疆分公司	        15             17                     新疆 
    5   中国平安人寿保险股份有限公新疆分公司	        15             17                     新疆 
    6   中国人民财产保险股份有限公阿克苏地区分公司	15             20                     阿克苏地区 
    7   中国人民财产保险股份有限公阿勒泰地区分公司	15             20                     阿勒泰地区 
    8   中国人民财产保险股份有限公昌吉回族自治州分公司    15             22                     昌吉回族自治州 
    
    
    
    后边的subName就是我成功截取的名字,就是我要截取的全名字的中后边不同分公司的字段,目的就是为了要获取不同的字段,然后进行分析。 
    
    这里是substr和instr的综合使用。 
    
    substr(stirng1,strat,length);截取功能; 
    解析一下:string1是你要截取的字符串,strat是要开始截取的位置,length是你要截取多少个字符串。 
    instr(string1,string2,end);是检索功能, 
    解析一下:string1是你要检索的字符串,string2是你在string1中要查找的字符串,end的意思1代表从字符串的开始检索,-1代表中字符串的末尾开始检索。具体返回值 
      如果 
      string1 为零长度 
      InStr返回 0 
      string1 为 Null 
      InStr返回 Null 
      string2 为零长度 
      InStr返回 Start 的值 
      string2 为 Null 
      InStr返回 Null 
      string2 找不到 
      InStr返回 0 
      在 string1 中找到string2 
      InStr返回 找到的位置 
      start 值 > len(string1 )值 
      InStr返回 0; 
    
    当instr将我们要检索字段的位置找到后,即返回所在的位置数据,我们就是可以利用substr函数进行截取,length就是我们我们检索出来的数字的差额。 
    

    select
           i1.fdisplayname,
           instr(i1.fdisplayname, '事',1,1)+1 as 事,
           instr(i1.fdisplayname, '业',1,2)+1 as 业,
           substr(i1.fdisplayname,
                  instr(i1.fdisplayname, '事',1,1)+1,
                  ((instr(i1.fdisplayname, '业',1,2)) - (instr(i1.fdisplayname, '事',1,1)+1))) as subname
      from SHENZHENJM1222.B i1

    分三步:

    1.

    select
           i1.fdisplayname,
           instr(i1.fdisplayname, '事',1,1)+1 as 事,
           instr(i1.fdisplayname, '业',1,2)+1 as 业              
      from SHENZHENJM1222.B i1

    第二部:


    select
    substr(i1.fdisplayname,
    instr(i1.fdisplayname, '事',1,1)+1, ((instr(i1.fdisplayname, '业',1,2)+1) - (instr(i1.fdisplayname, '事',1,1)+1)))
    as subname from SHENZHENJM1222.B i1

    如果想改变边界值,只需+后面的数字即可

  • 相关阅读:
    Python基础笔记
    Oracle PL/SQL学习之Hello World(0)
    编程开发之--Oracle数据库--存储过程在out参数中使用光标(3)
    编程开发之--Oracle数据库--存储过程和存储函数(2)
    编程开发之--Oracle数据库--存储过程和存储函数(1)
    火车票售票系统
    MySQL 字段内容区分大小写
    json_encode($b, JSON_FORCE_OBJECT) 可以强制转换成对象
    Sublime Text3配置
    springboot-配置多个数据源
  • 原文地址:https://www.cnblogs.com/qmfsun/p/4494326.html
Copyright © 2020-2023  润新知