Oracle截取字符串和查找字符串,聯合使用截取特定字符


oracle 截取字符(substr),檢索字符位置(instr) case when then else end語句使用 收藏 
常用函數:substr和instr
1.SUBSTR(string,start_position,[length])    求子字符串,返回字符串
解釋:string 元字符串
       start_position   開始位置(當開始位置是0或者1時,都表示從第一個字符開始截取)
       length 可選項,子字符串的個數
For example:
substr("ABCDEFG", 0); //返回:ABCDEFG,截取所有字符 
substr("ABCDEFG", 2); //返回:CDEFG,截取從C開始之后所有字符 
substr("ABCDEFG", 0, 3); //返回:ABC,截取從A開始3個字符 
substr("ABCDEFG", 0, 100); //返回:ABCDEFG,100雖然超出預處理的字符串最長度,但不會影響返回結果,系統按預處理字符串最大數量返回。 
substr("ABCDEFG", -3); //返回:EFG,注意參數-3,為負值時表示從尾部開始算起,字符串排列位置不變。

2.INSTR(string,subString,position,ocurrence)查找字符串位置
解釋:string:源字符串
      subString:要查找的子字符串
      position:查找的開始位置(從1開始)
      ocurrence:源字符串中第幾次出現的子字符串
For example:
INSTR('CORPORATE FLOOR','OR', 3, 2)中,源字符串為'CORPORATE FLOOR', 目標字符串為'OR',起始位置為3,取第2個匹配項的位置;返回結果為 14 '

測試字段實例:

表:cheyang.content=’ request="" PackId="" PackPlanId="100003624470" sFlag="1" ‘

要求:截取PackPlanId的vlaue值

  select substr(planid, 0, instr(planid, '"', 1, 1) - 1) planid  --planid(100003624470" sFlag=)截取”之前的字符串
    into v_PackPlanId
  from (select substr(content,INSTR(content, 'PackPlanId', 1, 1) + 11+1,20) planid   --packPlanId=長度是11+1(1),向后截取20個字符
  from sducy.cheyang
  where t.oid = v_oid);

測試結果:

  planid

  100003624470

3.組合使用instr和substr

  原串src:{"VALUE":"5"}

要求取出value對應的值:5

  select substr(src,instr(src,'"',1,3)+1,instr(src,'"',1,4)-1-instr(src,'"',1,3)) value  from dual;

測試結果:

  vale

   5

處理說明:

  截取開始位置:instr(src,'"',1,3)+1    //從第三個字符“后一個字符開始,

  截取字符長度:instr(src,'"',1,4)-1-instr(src,'"',1,3)    //從第4個字符“的前一個字符下標長度為串的長度,減去開始位置下標,獲得需要截取字符串的長度。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM