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函数的用法详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!