1. 程式人生 > >oracle中實現擷取字串(substr)、查詢字串位置(instr)、替換字串(replace)

oracle中實現擷取字串(substr)、查詢字串位置(instr)、替換字串(replace)



(1)oracle中實現擷取字串:substr

substr(string, start_position, [length])

其中,string是元字串,start_position為開始位置,length是可選項,表示子字串的位數。

例子:

substr('ABCDEFG', 0);    -- 返回結果是:ABCDEFG,從0位開始擷取後面所有

substr('ABCDEFG', 2);    -- 返回結果是:BCDEFG,從2位開始擷取後面所有

substr('ABCDEFG', 0, 3);  -- 返回結果是:ABC,從0位開始往後擷取3個字元長度

substr('ABCDEFG', 0, 100);  -- 返回結果是:ABCDEFG,雖然100超出了元字串長度,但是系統會按元字串最大數量返回,不會影響返回結果

substr('ABCDEFG', -3);  -- 返回結果是:EFG,如果是負數,則從尾部往前數,擷取-3位置往後的所有字串

(2)查詢字串位置:instr

instr(string, subString, [start_position, [nth_appearance]])

其中,string是元字串;subString是要查詢的子字串;start_position是要查詢的開始位置,為可選項(預設為1),注意在這裡字串索引從1開始,如果此引數為正,則從左到右檢索,如果此引數為負,則從右到左檢索;nth_appearance是元字串中第幾次出現的子字串,此引數可選,預設預設為1,如果是負數則系統報錯。

例子:

instr('ABCDABCDAEF', 'AB');   -- 返回結果是:1,因為instr字串索引從1開始,所以是1不是0

instr('ABCDABCDAEF', 'DA', 1, 2);   -- 返回結果是:8,返回第二次出現'DA'的位置

instr('A BCDABCDAEF', 'DA', 1, 2);  -- 返回結果是:9,由於我在元字串中加了一個空格,空格仍然算一個字元

(3)替換字串:replace

replace(str1, str2, str3)

其表示的意思是:在str1中查詢str2,凡是出現str2的地方,都替換成str3。

replace('ABCDEFG', 'CDE', 'cde');  -- 返回結果是:ABcdeFG

replace('ABCDEFG', 'CDE', '');   -- 返回結果是:ABFG,CDE被替換成空字元

replace('ABCDEFG', 'CDE');   -- 返回結果是:ABFG,當不存在第三個引數時,CDE直接被刪掉

使用例項:

將一張表的一列按條件擷取後存入到另一列。如下圖所示,將TAG_NAME中的內容擷取至最後一位“.”並將前面的內容存入到CHANNEL_NAME列。

sql語句:

<span style="font-size:18px;">UPDATE smartsys.fes_ana_define anadefine
   SET ANADEFINE.CHANNEL_NAME =
          SUBSTR (ANADEFINE.TAG_NAME,0,INSTR (ANADEFINE.TAG_NAME, '.', -1) - 1);</span>
<span style="font-size:18px;">commit;</span>

執行結果:




測試過程:

<span style="font-size:18px;">select substr(ANADEFINE.TAG_NAME,0,instr(ANADEFINE.TAG_NAME,'.',-1)-1)  </span>
<span style="font-size:18px;">		from smartsys.fes_ana_define anadefine; </span>

輸出結果: