Oracle中的INSTR,NVL和SUBSTR函数的用法详解
Oracle中INSTR的用法:
INSTR方法的格式为
INSTR(源字符串,要查找的字符串,从第几个字符开始,要找到第几个匹配的序号)
返回找到的位置,如果找不到则返回0.
例如:INSTR('CORPORATEFLOOR','OR',3,2)中,源字符串为'CORPORATEFLOOR',在字符串中查找'OR',从第三个字符位置开始查找"OR",取第三个字后第2个匹配项的位置。
默认查找顺序为从左到右。当起始位置为负数的时候,从右边开始查找。
所以SELECTINSTR('CORPORATEFLOOR','OR',-1,1)"aaa"FROMDUAL的显示结果是
Instring
——————
14
oracle的substr函数的用法:
取得字符串中指定起始位置和长度的字符串 substr(string,start_position,[length])
如:
substr('Thisisatest',6,2)wouldreturn'is' substr('Thisisatest',6)wouldreturn'isatest' substr('TechOnTheNet',-3,3)wouldreturn'Net' substr('TechOnTheNet',-6,3)wouldreturn'The' selectsubstr('Thisisatest',-4,2)valuefromdual
综合应用:
SELECTINSTR('CORPORATEFLOOR','OR',-1,1)"Instring"FROMDUAL --INSTR(源字符串,目标字符串,起始位置,匹配序号) SELECTINSTR('CORPORATEFLOOR','OR',3,2)"Instring"FROMDUAL SELECTINSTR('32.8,63.5',',',1,1)"Instring"FROMDUAL SELECTSUBSTR('32.8,63.5',INSTR('32.8,63.5',',',1,1)+1)"INSTRING"FROMDUAL SELECTSUBSTR('32.8,63.5',1,INSTR('32.8,63.5',',',1,1)-1)"INSTRING"FROMDUAL --CREATEDON2008-9-26BYADMINISTRATOR DECLARE --LOCALVARIABLESHERE TVARCHAR2(2000); SVARCHAR2(2000); NUMINTEGER; IINTEGER; POSINTEGER; BEGIN --TESTSTATEMENTSHERE T:='12.3,23.0;45.6,54.2;32.8,63.5;'; SELECTLENGTH(T)-LENGTH(REPLACE(T,';',''))INTONUMFROMDUAL; DBMS_OUTPUT.PUT_LINE('NUM:'||NUM); POS:=0; FORIIN1..NUMLOOP DBMS_OUTPUT.PUT_LINE('I:'||I); DBMS_OUTPUT.PUT_LINE('POS:'||POS); DBMS_OUTPUT.PUT_LINE('==:'||INSTR(T,';',1,I)); DBMS_OUTPUT.PUT_LINE('INSTR:'||SUBSTR(T,POS+1,INSTR(T,';',1,I)-1)); POS:=INSTR(T,';',1,I); ENDLOOP; END; --Createdon2008-9-26byADMINISTRATOR declare --Localvariableshere iinteger; TVARCHAR2(2000); SVARCHAR2(2000); begin --Teststatementshere --历史状态 T:='12.3,23.0;45.6,54.2;32.8,63.5;'; IF(TISNOTNULL)AND(LENGTH(T)>0)THEN --T:=T||','; WHILELENGTH(T)>0LOOP --ISTATUSID:=0; S:=TRIM(SUBSTR(T,1,INSTR(T,';')-1)); IFLENGTH(S)>0THEN DBMS_OUTPUT.PUT_LINE('LAT:'||SUBSTR('32.8,63.5',1,INSTR('32.8,63.5',',',1,1)-1)); DBMS_OUTPUT.PUT_LINE('LON:'||SUBSTR('32.8,63.5',INSTR('32.8,63.5',',',1,1)+1)); --COMMIT; ENDIF; T:=SUBSTR(T,INSTR(T,';')+1); ENDLOOP; ENDIF; end;
PS:下面看下Oracle中INSTR、SUBSTR和NVL的用法
INSTR用法:INSTR(源字符串,要查找的字符串,从第几个字符开始,要找到第几个匹配的序号)
返回找到的位置,如果找不到则返回0.默认查找顺序为从左到右。当起始位置为负数的时候,从右边开始查找。若起始位置为0,返回值为0。
SELECTINSTR('CORPORATEFLOOR','OR',0,1)FROMDUAL;返回值为0 SELECTINSTR('CORPORATEFLOOR','OR',2,1)FROMDUAL;返回值为2 SELECTINSTR('CORPORATEFLOOR','OR',2,2)FROMDUAL;返回值为5 SELECTINSTR('CORPORATEFLOOR','OR',-1,1)FROMDUAL;返回值为14 SELECTINSTR('CORPORATEFLOOR','OR',-5,1)FROMDUAL;返回值为5
SUBSTR用法:SUBSTR(源字符串,查找起始位置,[长度])
返回值为源字符串中指定起始位置和长度的字符串。
SELECTSUBSTR('Thisisatest',0,2)valuefromdual;返回值Th SELECTSUBSTR('Thisisatest',1,2)valuefromdual;返回值Hi SELECTSUBSTR('Thisisatest',-1,2)valuefromdual;返回值t SELECTSUBSTR('Thisisatest',-2,2)valuefromdual;返回值st
NVL用法:NVL(eExpression1,eExpression2)
从两个表达式返回一个非null值。如果eExpression1的计算结果为null值,则NVL()返回eExpression2。如果eExpression1的计算结果不是null值,则返回eExpression1。eExpression1和eExpression2可以是任意一种数据类型。如果eExpression1与eExpression2的结果皆为null值,则NVL()返回NULL。
SELECTnvl('pos1',null)fromdual;返回值为pos1 SELECTnvl(null,'pos2')fromdual;返回值为pos1 SELECTnvl(null,null)fromdual;返回值为null
以上所述是小编给大家介绍的Oracle中的INSTR,NVL和SUBSTR函数的用法详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!