在oracle中,可以利用Instr()和substr()函數來擷取字串中的一部分字元,語法為「SUBSTR('需要擷取的字串',擷取開始位置, INSTR('需要擷取的字串,'','查詢開始位置','第幾次出現')-1) 」。
本教學操作環境:Windows7系統、Oracle 11g版、Dell G3電腦。
oracle擷取欄位中的部分字串
使用Oracle中Instr()和substr()函數:
在Oracle中可以使用instr函數對某個字串進行判斷,判斷其是否含有指定的字元。
其語法為:
instr(sourceString,destString,start,appearPosition). instr('源字串' , '目標字串' ,'開始位置','第幾次出現')
其中
sourceString代表源字串;
destString代表想聰源字串中查詢的子串;
start代表查詢的開始位置,該引數可選的,預設為1;
appearPosition代表想從源字元中查詢出第幾次出現的destString,該引數也是可選的,預設為1;
如果start的值為負數,那麼代表從右往左進行查詢,但是位置資料仍然從左向右計算。
返回值為:查詢到的字串的位置。
對於instr函數,我們經常這樣使用:從一個字串中查詢指定子串的位置。例如:
SQL> select instr('yuechaotianyuechao','ao') position from dual; POSITION ---------- 6
從第7個字元開始搜尋
SQL> select instr('yuechaotianyuechao','ao', 7) position from dual; POSITION ---------- 17
從第1個字元開始,搜尋第2次出現子串的位置
SQL> select instr('yuechaotianyuechao','ao', 1, 2) position from dual; POSITION ---------- 17
對於instr函數,我們經常這樣使用:從一個字串中查詢指定子串的位置。例如:
SQL> select instr('abcdefgh','de') position from dual; POSITION ---------- 4
從1開始算 d排第四所以返回4
SQL>select instr('abcdefghbc','bc',3) position from dual; POSITION ---------- 9
從第3個字元開始算起 第3個字元是c,所以從3開始以後的字串找查詢bc,返回9
substr函數的用法,取得字串中指定起始位置和長度的字串 ,預設是從起始位置到結束的子串。
substr( string, start_position, [ length ] ) substr('目標字串',開始位置,長度)
如:
substr('This is a test', 6, 2) would return 'is' substr('This is a test', 6) would return 'is a test' substr('TechOnTheNet', -3, 3) would return 'Net' substr('TechOnTheNet', -6, 3) would return 'The'select substr('Thisisatest', -4, 2) value from dual
SUBSTR()函數
1.用處:是從給定的字元表示式或備註欄位中返回一個子字串。
2.語法格式:
substr(string string, int a, int b); substr(string string, int a) ;
格式1:
1、string 需要擷取的字串
2、a 擷取字串的開始位置(注:當a等於0或1時,都是從第一位開始擷取)
3、b 要擷取的字串的長度
格式2:
1、string 需要擷取的字串
2、a 可以理解為從第a個字元開始擷取後面所有的字串。
oracle擷取字串
將 C3411.907w15 擷取點號之前的字串 C3411 SUBSTR ('C3411.907w15', 0, INSTR ('C3411.907w15, '.', 1, 1) - 1)
SELECT SUBSTR ('C3411.907w15', 0, INSTR ('C3411.907w15, '.', 1, 1) - 1) FROM DUAL
將 C3411.907w15 擷取點號之後 的字串 907w15 SUBSTR ('C3411.907w15', INSTR ('C3411.907w15', '.', 1, 1)+1)
SELECT SUBSTR ('C3411.907w15', INSTR ('C3411.907w15', '.', 1, 1)+1) FROM DUAL
專案應用範例:
原始字串:
原始欄位中存在7個「_」,我現在只想取出最後一個「_」後面的字串,該怎麼解決呢?
分兩步:
第一步,通過Instr()函數,找到第7個「_」字元:
select instr('Q房網集團_經紀事業部_華南區_深圳世華_營業部_南山前海區_前海中心片區_前海五分店','_', 1, 7) fdisplayname from SHENZHENJM1222.B
或者:
select instr('Q房網集團_經紀事業部_華南區_深圳世華_營業部_南山前海區_前海中心片區_前海五分店', '_', -1, 1) fdisplayname FROM SHENZHENJM1222.B
兩者效果一樣,下面的-1,表示從右邊開始算起始字元,1表示獲取第一個「_」
獲取到的結果如圖:
第2步,通過substr()函數,取出所需要的欄位:
select substr(fdisplayname,instr(fdisplayname,'_',-1,1)+1) fdisplayname from SHENZHENJM1222.B
fdisplayname:代表欄位名,相當於元字串
重點介紹一下+1
+1表示在目標字串「_」後的第一個字串開始擷取
下面看一下不同的數位的情況:
select substr(fdisplayname,instr(fdisplayname,'_',-1,1)+1) fdisplayname from SHENZHENJM1222.B
在來看一下instr(fdisplayname,'_',-1,1)中的1是啥意思:
以上就是oracle怎麼擷取字串中的一部分字元的詳細內容,更多請關注TW511.COM其它相關文章!