首页  >  文章  >  数据库  >  oracle怎么截取字符串中的一部分字符

oracle怎么截取字符串中的一部分字符

青灯夜游
青灯夜游原创
2022-02-14 12:47:0556582浏览

在oracle中,可以利用Instr()和substr()函数来截取字符串中的一部分字符,语法为“SUBSTR('需要截取的字符串',截取开始位置, INSTR('需要截取的字符串,'','查找开始位置','第几次出现')-1) ”。

oracle怎么截取字符串中的一部分字符

本教程操作环境:Windows7系统、Oracle 11g版、Dell G3电脑。

oracle截取字段中的部分字符串

使用Oracle中Instr()和substr()函数

在Oracle中可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符。

其语法为:

instr(sourceString,destString,start,appearPosition).   
instr('源字符串' , '目标字符串' ,'开始位置','第几次出现')

其中

  • sourceString代表源字符串;

  • destString代表想聪源字符串中查找的子串;

  • start代表查找的开始位置,该参数可选的,默认为1;

  • appearPosition代表想从源字符中查找出第几次出现的destString,该参数也是可选的,默认为1;

如果start的值为负数,那么代表从右往左进行查找,但是位置数据仍然从左向右计算。

返回值为:查找到的字符串的位置。

对于instr函数,我们经常这样使用:从一个字符串中查找指定子串的位置。例如:

SQL> select instr('yuechaotianyuechao','ao') position from dual;
 POSITION
 ----------
 6

从第7个字符开始搜索

SQL> select instr('yuechaotianyuechao','ao', 7) position from dual;
 POSITION
 ----------
 17

从第1个字符开始,搜索第2次出现子串的位置

SQL> select instr('yuechaotianyuechao','ao', 1, 2) position from dual;
 POSITION
 ----------
 17

对于instr函数,我们经常这样使用:从一个字符串中查找指定子串的位置。例如: 

SQL> select instr('abcdefgh','de') position from dual; 
POSITION 
---------- 
4

从1开始算 d排第四所以返回4 

SQL>select instr('abcdefghbc','bc',3) position from dual; 
POSITION 
---------- 
9

从第3个字符开始算起 第3个字符是c,所以从3开始以后的字符串找查找bc,返回9 

substr函数的用法,取得字符串中指定起始位置和长度的字符串  ,默认是从起始位置到结束的子串。

 substr( string, start_position, [ length ] )       substr('目标字符串',开始位置,长度)

如: 

      substr('This is a test', 6, 2)     would return 'is' 
      substr('This is a test', 6)     would return 'is a test' 
      substr('TechOnTheNet', -3, 3)     would return 'Net' 
      substr('TechOnTheNet', -6, 3)     would return 'The'select substr('Thisisatest', -4, 2) value from dual

SUBSTR()函数   

1.用处:是从给定的字符表达式或备注字段中返回一个子字符串。    

2.语法格式:

substr(string string, int a, int b);
substr(string string, int a) ; 

格式1:

        1、string 需要截取的字符串 

        2、a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取)

        3、b 要截取的字符串的长度

    格式2:

        1、string 需要截取的字符串

        2、a 可以理解为从第a个字符开始截取后面所有的字符串。

oracle截取字符串

将 C3411.907w15 截取点号之前的字符串 C3411    SUBSTR ('C3411.907w15',  0,  INSTR ('C3411.907w15, '.', 1, 1) - 1)  

SELECT SUBSTR ('C3411.907w15', 0, INSTR ('C3411.907w15, '.', 1, 1) - 1)
  FROM DUAL

将 C3411.907w15 截取点号之后 的字符串 907w15   SUBSTR ('C3411.907w15', INSTR ('C3411.907w15', '.', 1, 1)+1)

SELECT SUBSTR ('C3411.907w15', INSTR ('C3411.907w15', '.', 1, 1)+1)
  FROM DUAL

项目应用实例:

原始字符串:

原始字段中存在7个“_”,我现在只想取出最后一个“_”后面的字符串,该怎么解决呢?

分两步:

第一步,通过Instr()函数,找到第7个“_”字符:

select instr('Q房网集团_经纪事业部_华南区_深圳世华_营业部_南山前海区_前海中心片区_前海五分店','_', 1, 7) fdisplayname from SHENZHENJM1222.B

或者:

select instr('Q房网集团_经纪事业部_华南区_深圳世华_营业部_南山前海区_前海中心片区_前海五分店', '_', -1, 1) fdisplayname FROM SHENZHENJM1222.B

两者效果一样,下面的-1,表示从右边开始算起始字符,1表示获取第一个“_”

获取到的结果如图:

 

第2步,通过substr()函数,取出所需要的字段:

select substr(fdisplayname,instr(fdisplayname,'_',-1,1)+1) fdisplayname from SHENZHENJM1222.B

fdisplayname:代表字段名,相当于元字符串

重点介绍一下+1

+1表示在目标字符串“_”后的第一个字符串开始截取

下面看一下不同的数字的情况:

 

select substr(fdisplayname,instr(fdisplayname,'_',-1,1)+1) fdisplayname from SHENZHENJM1222.B

在来看一下instr(fdisplayname,'_',-1,1)中的1是啥意思:

推荐教程:《Oracle教程

以上是oracle怎么截取字符串中的一部分字符的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn