oracle字符串載取及判斷是否包含指定字符串


 

oracle 截取字符(substr),檢索字符位置(instr) case when then else end語句使用 收藏
常用函數:substr和instr
1.SUBSTR(string,start_position,[length])    求子字符串,返回字符串
解釋:string 元字符串
       start_position   開始位置(從0開始)
       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:查找的開始位置
      ocurrence:源字符串中第幾次出現的子字符串
For example:
INSTR('CORPORATE FLOOR','OR', 3, 2)中,源字符串為'CORPORATE FLOOR', 目標字符串為'OR',起始位置為3,取第2個匹配項的位置;返回結果為 14 '

1、substr("ABCDEFG", 0, -3); //返回:EFG,注意參數-3,為負值時表示從尾部開始算起,字符串排列位置不變。

這個應該去掉0,否則,取到的值為null

原文http://blog.csdn.net/caozhongyan/article/details/6607798

切割字符串,一般是不會通過數據庫函數來處理的(大部分是查詢出結果后通過代碼處理的),但是也有特殊的情況;

比如:Oracle數據庫有一張表Node,字段有:

ID:主鍵

parentID:父節點

STATID:查詢編碼

NAME:名稱

STATNAME:查詢名字

SCALE:父子級別

看的出,這是張存儲父子結構關系的表,而STATID的左右就是把父子結構的關系拼接起來:比如,某記錄為:

ID   parentID    STATID   NAME            STATNAME                 SCALE

01                1       華南             華南                      1

03      01        1s3      上海             華南s上海                2

05      03        1s3s5    浦東新區        華南s上海s浦東新區        3

很容易看的出三條記錄的父子結構,而STATID就是把當前記錄的所有父節點的ID,用's'連接起來;比如ID=05的記錄是“浦東新區”,是第三級的節點,它的父節點即二級節點是ID=03的“上海”,而“上海”的父節點即一級節點是ID=01的“華南”,這時“浦東新區”的STATID 就是1s3s5   

以此表為例,分割STATID!

常用函數:substr和instr

SUBSTR(string,start_position,[length])    求子字符串,返回字符串

解釋:string 元字符串

       start_position   開始位置(從0開始)

       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", 0, -3); //返回:EFG,注意參數-3,為負值時表示從尾部開始算起,字符串排列位置不變

INSTR(string,subString,position,ocurrence)查找字符串位置

解釋:string:源字符串

      subString:要查找的子字符串

      position:查找的開始位置

      ocurrence:源字符串中第幾次出現的子字符串

For example:

INSTR('CORPORATE FLOOR','OR', 3, 2)中,源字符串為'CORPORATE FLOOR', 目標字符串為'OR',起始位置為3,取第2個匹配項的位置;返回結果為 14

由上面兩個函數就可以進行字符串的切割了!

比如SQL如下:

select n.ID,n.parentid,n.statid,n.name
   substr(n.statid,instr(n.statid,'s',1,2)+1,(instr(n.statid,'s',1,3)-instr   (n.statid,'s',1,2)-1)) market_id
   from node n

注意:上面查找的就是statid中所有三級節點的ID值

       所有,真實使用中一定注意,只有三級(包含三級)以上的節點才有market_id值

==========================================================================================================================

 

declare aa varchar2 := 'wkressssdfdf';

begin

if instr(aa,'s')>0 then

dbms_output.put_line('有s字符');

else dbms_output.put_line('沒有s字符');

end if;

end;


免責聲明!

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



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