ORACLE截取表中某含有标识符,多个字节的字段(4408***/4408***/4408***/4408***),INSTR与SUBSTR结合使用

oracle INSTR与SUBSTR结合使用,截取表中某含有标识符,多个字节的字段,如:(4408***/4408***/4408***/4408***)

  • instr语法
  • SUBSTR语法
  • 示例
  • 大致解释。。
  • 查询结果图

instr语法

instr(sourceString,destString,start,appearPosition)
sourceString:源字符串;
destString:要从源字符串中查找的子串;
start:查找的开始位置,这个参数可选的,默认为1;
appearPosition:想从源字符中查找出第几次出现的destString,这个参数也是可选的, 默认为1 。

SUBSTR语法

SUBSTR(sourceString,start,length)
sourceString:源字符串;
start:截取的开始位置;
length:截取的长度,默认到strat到最终位置的长度;

示例

SELECT 

INSTR(Gajgjgdm,'/') as 第一个分号的位置,
INSTR(Gajgjgdm||'/440899571111','/',-1) as 最后一个分号的位置,
Gajgjgdm||'/440899571111' as 增加一个字段440899571111,
         SUBSTR(Gajgjgdm||'440899571111',1,INSTR(Gajgjgdm||'/440899571111','/')-1) as 第一个字段, 

SUBSTR(Gajgjgdm||'440899571111',INSTR(Gajgjgdm||'/440899571111','/',1,2)+1,12) as 第三个字段,

SUBSTR(Gajgjgdm||'440899571111',INSTR(Gajgjgdm||'/440899571111','/',1,3)+1,12) as 最后一个字段,

SUBSTR(Gajgjgdm||'440899571111',INSTR(Gajgjgdm||'/440899571111','/',-1)+1,12) as 最后一个字段

FROM ZJ_ZA_LGY_LGXX T

大致解释。。

如下图所示:
注:Gajgjgdm只是我的表中的一个字段名。

  • 表ZJ_ZA_LGY_LGXX的Gajgjgdm字段的格式为“440800000000/440803000000/440803570000”,为了详细示例,手动通过||’440899571111’给Gajgjgdm增加一个字节,现在为4个字节:440800000000/440803000000/440803570000/440899571111。

  • 如果要取第一个字节,可以使用INSTR语句:INSTR(Gajgjgdm,’/’),得到第一个“/”的坐标位置,INSTR(Gajgjgdm,’/’)默认查找的起始位置为1以及“/”第一次出现的位置,由于字节440800000000长度为12,可以得出”/”第一次出现的位置为13;然后通过SUBSTR语句截取Gajgjgdm 这一列,从第1位开始,长度为12的字节:

SUBSTR(Gajgjgdm||'440899571111',1,INSTR(Gajgjgdm||'/440899571111', '/')-1)
  • 依次类推,需要截取第二段第三段第四段都是同样的原理,如截取第三个字段,先使用INSTR语句:INSTR(Gajgjgdm ||’/440899571111’,’/’,1,2)找出“/”第二次出现的位置,为26,由于字段中每一该字节的长度都是12,所以这里我直接使用了

    SUBSTR(Gajgjgdm||'440899571111',INSTR(Gajgjgdm||'/440899571111','/',1,2)+1,12)

    如果字节的长度是不固定的,可以通过查询“/”第二次出现的位置与第一次出现的位置的差作为SUBSTR的长度,如:

    SUBSTR(Gajgjgdm||'440899571111',INSTR(Gajgjgdm||'/440899571111','/',1,2)+1,INSTR(Gajgjgdm||'/440899571111','/',1,3)-INSTR(Gajgjgdm||'/440899571111','/',1,2)-1)
  • 实际操作中不一定这个字段每个都是固定3个或者4个字节,这时候如果需要取最后一个字节,如何操作?

    INSTR(Gajgjgdm, '/',-1)

    表示查询的为最后一次“/”出现的位置,如果需要截取某列最后一个字节但是此字段拥有不相等的字节,可以使用

    INSTR(Gajgjgdm, '/',-1)

    来得出“/”最后一次出现的位置,有上述substr语法可知substr语句不定义长度的时候默认取到最后一个字节,这时候再使用

    SUBSTR(Gajgjgdm||'440899571111',INSTR(Gajgjgdm||'/440899571111', '/',-1)+1)

    可得。

查询结果图:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值