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
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’这样的话,就找不到了。
本文转自 ywanhzy的博客