关于instr的用法是从 http://www.cnblogs.com/Xrinehart/archive/2005/04/21/142791.html 转帖过来的.
INSTR方法的格式为
INSTR(源字符串, 目标字符串, 起始位置, 匹配序号)
例如:INSTR('CORPORATE FLOOR','OR', 3, 2)中,源字符串为'CORPORATE FLOOR', 目标字符串为'OR',起始位置为3,取第2个匹配项的位置。
默认查找顺序为从左到右。当起始位置为负数的时候,从右边开始查找。
所以SELECT INSTR('CORPORATE FLOOR', 'OR', -1, 1) "Instring" FROM DUAL的显示结果是
Instring
——————
14
INSTR(源字符串, 目标字符串, 起始位置, 匹配序号)
例如:INSTR('CORPORATE FLOOR','OR', 3, 2)中,源字符串为'CORPORATE FLOOR', 目标字符串为'OR',起始位置为3,取第2个匹配项的位置。
默认查找顺序为从左到右。当起始位置为负数的时候,从右边开始查找。
所以SELECT INSTR('CORPORATE FLOOR', 'OR', -1, 1) "Instring" FROM DUAL的显示结果是
Instring
——————
14
translate vs. replace
translate(src,from_str,to_str): 如果src中存在from_str,那么此时translate的功能就相当于replace,直接将源字符窜src中所有的from_str全部替换成to_str.但是如果src中只包含了from_str的部分,此情况就有点不一样了.
1.select translate('12o12o12o','12','1'),replace('12o12o12o','12','1') from dual;
在这个例子里面,translate和replace起到的作用是相同的.
2.select TRANSLATE('kkaxksx', 'kx', '12'),TRANSLATE('kkaxksx', 'kks', '12')from dual ;
TRANSLATE('kkaxksx', 'kx', '12') TRANSLATE('kkaxksx', 'kks', '12')
-----------------------------------------------------------------------
11a21s2 11ax1x
translate将'kx'与'12'按字符分别进行对应,它会把'kkaxksx'中所有的'k'->'1','x'->'2'(在replace中是不会把from_str进行分解的,而是把它当成一个整体).
当from_str的长度大于to_str时,如from_str:'kxs',to_str:'12',则的'k'->'1','x'->'2','s'->'';最后的一位就对应空窜了.
而在第二个替换中,from_str中有重复的值'k',那么在与to_str进行映射的过程中,则采用如下方式:
'k'->'1',由于'k'已经映射过,所以第二位不进行匹配,但是from_str和to_str的字符映射指针都会向后移一位,最终就导致to_str的第二位被忽略.那么from_str的第三位则只能匹配''空窜.
在这个例子里面,translate和replace起到的作用是相同的.
2.select TRANSLATE('kkaxksx', 'kx', '12'),TRANSLATE('kkaxksx', 'kks', '12')from dual ;
TRANSLATE('kkaxksx', 'kx', '12') TRANSLATE('kkaxksx', 'kks', '12')
-----------------------------------------------------------------------
11a21s2 11ax1x
translate将'kx'与'12'按字符分别进行对应,它会把'kkaxksx'中所有的'k'->'1','x'->'2'(在replace中是不会把from_str进行分解的,而是把它当成一个整体).
当from_str的长度大于to_str时,如from_str:'kxs',to_str:'12',则的'k'->'1','x'->'2','s'->'';最后的一位就对应空窜了.
而在第二个替换中,from_str中有重复的值'k',那么在与to_str进行映射的过程中,则采用如下方式:
'k'->'1',由于'k'已经映射过,所以第二位不进行匹配,但是from_str和to_str的字符映射指针都会向后移一位,最终就导致to_str的第二位被忽略.那么from_str的第三位则只能匹配''空窜.