Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2882802
  • 博文数量: 200
  • 博客积分: 2413
  • 博客等级: 大尉
  • 技术积分: 3067
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-01 22:07
文章分类

全部博文(200)

文章存档

2018年(2)

2017年(8)

2016年(35)

2015年(14)

2014年(20)

2013年(24)

2012年(53)

2011年(44)

分类: Oracle

2012-08-07 22:04:55

通过substr和instr这两个函数组合应用就可以截取字符串中想要的字符。


substr函数主要用来截取字符串。
语法:
substr( string, start_position, [ length ] )
string:列或者字符串
start_position:开始的位置,蒸熟表示从左开始,负数表示从右开始。如,1表示从左边第一个字符开始;-2表示从右侧第2个字符开始。
                         注意:无路是正负,都要从开始位置向右数。
[ length ] :可写可不不写。写的话,表示从截取开始位置往后n个字符。不写表示,从开始位置到结尾。

1.不写length的情况,表示从左面第一个字符,一直到最后。
SQL> select substr('/cms_download/download/file.do',1) from dual;
SUBSTR('/CMS_DOWNLOAD/DOWNLOAD
------------------------------
/cms_download/download/file.do

2.写length的情况,从左面第一个字符开始,一直到第14个字符。
SQL> select substr('/cms_download/download/file.do',1,14) from dual;
SUBSTR('/CMS_D
--------------
/cms_download/

3.length为负的情况,从右侧第2个字符开始,向右数2个字符。
SQL> select substr('/cms_download/download/file.do',-2,2) from dual;
SU
--
do



instr函数用来计算长度。

语法:
INSTR(源字符串, 目标字符串, 起始位置, 匹配序号)
源字符串:字符串或者列
目标字符串:要定位的字符串
起始位置:开始的位置
匹配序号:目标字符串第几次出现

实验:
1.从左边第1个字符开始,字符"/"第2次出现,一共多少个字符。
SQL> select instr('/cms_download/download/file.do','/',1,2) from dual;
INSTR('/CMS_DOWNLOAD/DOWNLOAD/FILE.DO','/',1,2)
-----------------------------------------------
                              14



substr与instr组合,实现动态截取目标字符串
截取第2个/之前的字符串
SQL> select substr('/cms_download/download/file.do',2,instr('/cms_download/download/file.do','/',1,2)-2) from dual ;
SUBSTR('/CMS
------------
cms_download

instr('/cms_download/download/file.do','/',1,2)-2:定位从字符串开始到第二个/的length
substr('/cms_download/download/file.do',2,instr('/cms_download/download/file.do','/',1,2)-2):截取从第2个字符开始,到上面得到的length。

截取第2个/后面的字符串
select (substr('/cms_download/download/file.do',instr('/cms_download/download/file.do','/',1,2))) from dual;
SQL>
(SUBSTR('/CMS_DOW
-----------------
/download/file.do
阅读(10180) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~