一:理論
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 '
二:實際測試
select substr('OR:com.lcs.wc.placeholder.Placeholder:860825',INSTR('OR:com.lcs.wc.placeholder.Placeholder:860825',':', 1, 2)+1,length('OR:com.lcs.wc.placeholder.Placeholder:860825')) ,INSTR('OR:com.lcs.wc.placeholder.Placeholder:860825',':', 1, 2), length('OR:com.lcs.wc.placeholder.Placeholder:860825') From dual;
測試成功
取最後一個\後面的字符
select substr('D:\AssetsManagement\resource\ehcache\test.txt',1+(select instr ('D:\AssetsManagement\resource\ehcache\test.txt','\',1,(select length('D:\AssetsManagement\resource\ehcache\test.txt') - length(replace('D:\AssetsManagement\resource\ehcache\test.txt','\','')) from dual)) from dual)
,length('D:\AssetsManagement\resource\ehcache\test.txt')-(select instr ('D:\AssetsManagement\resource\ehcache\test.txt','\',1,(select length('D:\AssetsManagement\resource\ehcache\test.txt') - length(replace('D:\AssetsManagement\resource\ehcache\test.txt','\','')) from dual)) from dual)
) from dual
如果前面D:\AssetsManagement\resource\ehcache\是固定的就直接replace了
select replace('D:\AssetsManagement\resource\ehcache\test.txt','D:\AssetsManagement\resource\ehcache\','') from dual
可以用幾個Oracle的系統函數聯合完成。語句如下:SELECT SUBSTR('AHS1234 3232',0,INSTR('AHS1234 3232',' ')-1) str FROM dual; 結果是:AHS1234
instr函數是查找空格在字符串中的位置,SUBSTR函數是截取字符串,從字符串開始截取到空格的位置的前一位(例:空格的位置是8,截取8-1=7位字符)