2017-05-11 62 views
-4

我有一個列具有字符串值,像如何從字符串中獲取特定值?

"BY *MAN MOBILE*0112305V7 - JAIPUR " 

我需要得到*之間寫的代碼 - 例0112305V7。有人可以幫我這個問題

+0

在上面的例子中,你有兩個'*'。之後你總是希望從第二個'*'和第一個'-'? – Utsav

+1

到目前爲止您嘗試過什麼? SO不適用於像「如何做到這一點」這樣的問題,所以請做一些搜索,嘗試一些代碼,然後,如果您的代碼存在問題,請在此處發佈問題。 – Aleksej

+0

HI Utsav,我只需要在第二個*和 - – Akanksha

回答

1

也許是這樣的正則表達式有:

select regexp_substr('BY *MAN MOBILE*0112305V7 - JAIPUR ','[[:digit:]]{3,}[[:alnum:]]{3,}') from dual; 
+0

這正是我一直在尋找的......謝謝 – Akanksha

0

試試這個(與你的列名替換str):

SELECT SUBSTR(str, INSTR(str, '*', 2) + 1, INSTR(str, '-') - INSTR(str, '*', 2) - 1) 

注意:這隻會在你的字符串包含__*__*XXXX-____

+0

對不起,這不起作用 – Akanksha

+0

爲什麼它不工作?你有什麼? –

+0

我得到MAN MOBILE * 0112305V7作爲結果 – Akanksha

0

假設的情況下工作在出現'*'之後,您的字符串始終有兩個'*'和一個' - ',以獲得第二個'*'' - '之間的值,那麼您可以使用:

select substr(str, instr(str, '*', 1, 2)+1, instr(str, ' - ') - instr(str, '*', 1, 2) -1) as theNeededString, 
     instr(str, '*', 1, 2) as theSecondStar, 
     instr(str, ' - ') - instr(str, '*', 1, 2)-1 as lengthOfTheNeededString 
from (select 'BY *MAN MOBILE*0112305V7 - JAIPUR ' str from dual) 

這給相當self_explanatory結果:

THENEEDED THESECONDSTAR LENGTHOFTHENEEDEDSTRING 
--------- ------------- ----------------------- 
0112305V7   15      9 
相關問題