1. 程式人生 > >關於oracle中字串的擷取——substr

關於oracle中字串的擷取——substr

昨天在工作中遇到了擷取字串問題的,特地的學習了一下substr函式,在此做個記錄:

1、擷取不帶特殊欄位的某一個特定字串:

(1) 從字串左邊某一個位置擷取到其後面多少位:SELECT SUBSTR('abcdefghijklmn',2,3) FROM dual

(2)從字串左邊某一個位置(包括一位)擷取到最後:SELECT SUBSTR('abcdefghijklmn',3) FROM dual

(3)從字串右邊某一個位置向左擷取多少位:SELECT SUBSTR('abcdefghijklmn',-3,3) FROM dual

(4)從字串右邊某一個位置(包括一位)向左擷取多少位:SELECT SUBSTR('abcdefghijklmn',-4) FROM dual

2、以某一個特殊欄位作參考,擷取資料:

(1)含有多個特定字元,擷取其中一個字元後的資料:

select substr('SSOC-DSWB-13-001', instr('SSOC-DSWB-12-001', '-', 1, 1) + 1)  from dual

--解析:彩色背景的引數值,控制從第幾個特殊字元位置擷取;紅色字型的數字代表從第幾位開始擷取。即:從第一個‘-’後第一位開始擷取

select substr('SSOC-DSWB-13-001', instr('SSOC-DSWB-12-001', '-', 1, 1) + 2)  from dual

--解析:彩色背景的引數值,控制從第幾個特殊字元位置擷取;紅色字型的數字代表從第幾位開始擷取。

即:從第一個‘-’後第二位開始擷取

(2)擷取特殊欄位前的字串:SELECT substr('abcdef-ghijklmn',1,instr('abcdef-ghijklmn','-')-1)  from dual

(3)擷取特殊欄位後的字串:SELECT substr('abcd-efghijklmn',instr('abcd-efghijklmn','-')+1,length('abcd-efghijklmn')-instr('abcd-efghijklmn','-'))   from dual