2013-07-22 127 views
0

我試圖從那裏一切都在一列,下面有一個例子地址提取狀態之間的值:獲得第二和第三個逗號

2901 MAIN ST,CORNING,NY,14830 

我一直在試圖找出如何使用做substrinstr在一起,但我似乎無法得到instr的掛。以下是我迄今爲止:

select substr('hello,hello,NY,11725-1234',1,instr('hello,hello,NY,11725-1234',',',2,3)) 
from dual; 

我認爲這將開始在在第3第二個逗號和結束並獲得與我的一切,但似乎沒有這樣的情況。

任何幫助表示讚賞。

回答

3
select 
    regexp_substr('2901 MAIN ST,CORNING,NY,14830', '(.*?,){2}(.*?),', 1, 1, '', 2) 
from dual 

一般來說,

n_th_component := 
    regexp_substr(string, '(.*?,){'||(n-1)||'}([^,]*)', 1, 1, '', 2); 

例子:

select 
    n, 
    regexp_substr('2901 MAIN ST,CORNING,NY,14830', 
       '(.*?,){'||(n-1)||'}([^,]*)', 1, 1, '', 2) 
from (select level n from dual connect by level <= 4) 
+0

雖然我願意接受一些作品,我不知道這是什麼一樣,它難道不在未來幫助我。無論如何,你可以解釋這是做什麼? – user2405778

+0

感謝您的幫助,我會嘗試解密您鏈接的網站的語法。我也假設RTFM代表閱讀F ****手冊,如果你不喜歡幫助人,那麼你應該離開這個網站。我讀完這個鏈接後來到這裏,仍然無法得到我所需要的。 – user2405778

+5

@ user2405778,雖然我也發現F位有攻擊性,但我也認識到RTFM僅僅是「首先閱讀」的標準方式。如果葉戈爾想冒犯你,他就不會鏈接到相關文件。在閱讀完文檔後,你可能會說「好的,我讀了鏈接,但我不明白x,y,z」 - 一直記得我們都是無償志願者,我們喜歡幫助人們,但我們不是你的私人導師。 –

4

正則表達式是做這樣的事情的好方法。 SUBSTR和INSTR然而,也可以使用,通過利用INSTR的第四個參數的,nth_appearance

select INSTR(mystring,',',1,1) AS first_comma 
     ,INSTR(mystring,',',1,2) AS second_comma 
     ,SUBSTR(mystring 
      ,INSTR(mystring,',',1,1) + 1 
      ,INSTR(mystring,',',1,2) 
       - INSTR(mystring,',',1,1) 
       - 1) 
     AS middle_bit 
FROM 
(select 'hello,world,NY,11725-1234' as mystring from dual); 

FIRST_COMMA SECOND_COMMA MIDDLE_BIT 
=========== ============ ========== 
      6   12 world 
相關問題