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 '
原文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;
這個應該去掉0,否則,取到的值為null