1. 程式人生 > >oracle 如何擷取兩個"-"之間的字串

oracle 如何擷取兩個"-"之間的字串

奧迪-A5-Coupe Qu-2.0T-7檔自動-兩門四驅-西拉紅-深內飾

比如這樣的一串字元,我如何截取出"西拉紅"這3個字

select substr('123-asdf-119',instr('123-asdf-119','-')+1,instr('123-asdf-119','-',instr('123-asdf-119','-')+1)-instr('123-asdf-119','-')-1) from dual;

12068

可以使用substr函式及instr函式共同實現:

如,字串為:123-asdf-119

現在要擷取兩個“-”中間的字串,可用如下語句:

select substr(
'123-asdf-119',instr('123-asdf-119','-')+1,instr('123-asdf-119','-',instr('123-asdf-119','-')+1)-instr('123-asdf-119','-')-1) from dual;

查詢結果:

instr函式:

語法如下: 

instr( string1, string2, start_position,nth_appearance )

substr函式:

substr(string,start,length)

string - 指定的要擷取的字串

start - 必需,規定在字串的何處開始

正數 - 在字串的指定位置開始

負數 - 在從字串結尾的指定位置開始

0 - 在字串中的第一個字元處開始

length - 可選,指定要擷取的字串長度,預設時返回字元表示式的值結束前的全部字元。

SELECT REGEXP_SUBSTR('奧迪-A5-Coupe Qu-2.0T-7檔自動-兩門四驅-西拉紅-深內飾', '[^-]+', 1, LEVEL, 'i') AS STR
FROM DUAL
CONNECT BY LEVEL <=
LENGTH('奧迪-A5-Coupe Qu-2.0T-7檔自動-兩門四驅-西拉紅-深內飾') - LENGTH(REGEXP_REPLACE('奧迪-A5-Coupe Qu-2.0T-7檔自動-兩門四驅-西拉紅-深內飾', '-', ''))+1;