oracle怎么截取字符串中的一部分字符

oracle中,可以利用Instr()和substr()函數來截取字符串中的一部分字符,語法為“SUBSTR(‘需要截取的字符串’,截取開始位置, INSTR(‘需要截取的字符串,”,’查找開始位置’,’第幾次出現’)-1) ”。

oracle怎么截取字符串中的一部分字符

本教程操作環境: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

項目應用實例:

原始字符串:

oracle怎么截取字符串中的一部分字符

原始字段中存在7個“_”,我現在只想取出最后一個“_”后面的字符串,該怎么解決呢?

分兩步:

第一步,通過Instr()函數,找到第7個“_”字符:

select instr(‘Q房網集團_經紀事業部_華南區_深圳世華_營業部_南山前海區_前海中心片區_前海五分店’,’_’, 1, 7) fdisplayname from SHENZHENJM1222.B

或者:

select instr(‘Q房網集團_經紀事業部_華南區_深圳世華_營業部_南山前海區_前海中心片區_前海五分店’, ‘_’, -1, 1) fdisplayname FROM SHENZHENJM1222.B

兩者效果一樣,下面的-1,表示從右邊開始算起始字符,1表示獲取第一個“_”

獲取到的結果如圖:

oracle怎么截取字符串中的一部分字符

oracle怎么截取字符串中的一部分字符

?

第2步,通過substr()函數,取出所需要的字段:

select substr(fdisplayname,instr(fdisplayname,’_’,-1,1)+1) fdisplayname from SHENZHENJM1222.B

fdisplayname:代表字段名,相當于元字符串

重點介紹一下+1

+1表示在目標字符串“_”后的第一個字符串開始截取

下面看一下不同的數字的情況:

oracle怎么截取字符串中的一部分字符

oracle怎么截取字符串中的一部分字符

oracle怎么截取字符串中的一部分字符

?

select substr(fdisplayname,instr(fdisplayname,’_’,-1,1)+1) fdisplayname from SHENZHENJM1222.B

在來看一下instr(fdisplayname,’_’,-1,1)中的1是啥意思:

oracle怎么截取字符串中的一部分字符

oracle怎么截取字符串中的一部分字符

oracle怎么截取字符串中的一部分字符

推薦教程:《Oracle教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享