首页 > Linux操作系统 > Linux操作系统 > substr和instr的用法
oracle的substr函数的语法:
取得字符串中指定起始位置和长度的字符串 substr( string, start_position, [ length ] )
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'
只取后5个字符串:
SQL> select substr('F_USER_ACTIONCODE',-5) from dual;
SUBSTR('F_USER_ACTIONCODE',-5)
------------------------------
NCODE
去除前5个字符串,只取后面的字符串:
SQL> select substr('F_USER_ACTIONCODE',5) from dual;
SUBSTR('F_USER_ACTIONCODE',5)
-----------------------------
ER_ACTIONCODE
可用 || 进行拼接
SQL> select 'a'||substr('kuja',2) from dual;
'A'||SUBSTR('KUJA',2)
---------------------
Auja
结合这个用法,可以修改表中的一列字段
update temp2 set username='9y'||substr(username,1)||'st'
instr方法的格式
INSTR(源字符串, 目标字符串, 起始位置, 匹配序号)
例如:INSTR('CORPORATE FLOOR','OR', 3, 2)中,源字符串为'CORPORATE FLOOR', 目标字符串为'OR',起始位置为3,取第2个匹配项的位置。
默认查找顺序为从左到右。当起始位置为负数的时候,从右边开始查找。
所以
例1:
SELECT INSTR('CORPORATE FLOOR', 'OR', -1, 1) "Instring" FROM DUAL
显示结果是
Instring
——————
14
关于这个结果是这样阅读的:从右开始找到第一个匹配‘OR’的字符串(即,最后一个OR),打印出的‘14’是从左开始数得到的位置。
例2:
SQL> SELECT INSTR('CORPORATE FLOOR', 'OO', -2) "Instring" FROM DUAL;
Instring
----------
13
SQL> SELECT INSTR('CORPORATE FLOOR', 'OO', -1) "Instring" FROM DUAL;
Instring
----------
13
以上2句sql的阅读方法:从右起第二的位置开始找第一次出现‘OO’的位置
从右起第一的位置开始找第一次出现‘OO’的位置
这样出来的结果就是一样的,因为从右起第一或第二开始找,找到的第一个‘OO’从左数起都是在第13个位置。
但是如果:
SQL> SELECT INSTR('CORPORATE FLOOR', 'OO', -4) "Instring" FROM DUAL;
Instring
----------
0
这样的话右起第四个字符已经跳过了‘OO’这样的话,就找不到了。
举一个简单的同时运用到substr和instr的sql:
update f_user set F_USER_ACTIONCODE=substr(F_USER_ACTIONCODE,0,INSTR(f_user_actioncode,'7000,')+4) where F_USER_ACTIONCODE like '%,8000,'
阅读方法:user_actioncode字段,第一次出现‘7000,’的位置n 加4
将含有‘8000,’的USER_ACTIONCODE字段,截取到‘7000,’为止
结果:
SQL> select substr('1000,7000,8000,',0,INSTR('1000,7000,8000,','7000,')+4) from dual;
SUBSTR('1000,7000,8000,',0,INS
------------------------------
1000,7000,
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13379967/viewspace-544544/,如需转载,请注明出处,否则将追究法律责任。