Oracle字符窜操作函数

关于instr的用法是从 http://www.cnblogs.com/Xrinehart/archive/2005/04/21/142791.html 转帖过来的.

INSTR方法的格式为
INSTR(源字符串, 目标字符串, 起始位置, 匹配序号)

例如:INSTR(
'CORPORATE FLOOR','OR'32)中,源字符串为'CORPORATE FLOOR', 目标字符串为'OR',起始位置为3,取第2个匹配项的位置。

默认查找顺序为从左到右。当起始位置为负数的时候,从右边开始查找。

所以SELECT INSTR(
'CORPORATE FLOOR''OR'-11) "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的第三位则只能匹配''空窜.

posted on 2008-10-09 12:27  CodingME!  阅读(364)  评论(0编辑  收藏  举报

导航

Blog