网站推广.NET

网站推广.NET

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截取字符串