在oracle中,可以利用Instr()和substr()函数来截取字符串中的一部分字符,语法为“SUBSTR('需要截取的字符串',截取开始位置, INSTR('需要截取的字符串,'','查找开始位置','第几次出现')-1) ”。
本教程操作环境: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中文网
发表评论 取消回复