2012-08-24 31 views
0

我正在嘗試查找與字符數限制有關的substr的最近分隔符。具有分隔符範圍的oracle substr函數

Eg: select 'oneone,twotwo, threethree, four,five,six,seven,eight,nine,ten,eleven,twelve' from dual; 

現在,我想蓋住SUBSTR從這個字符串僅拉出第30個字符,同時確保與最近的SUBSTR結束「」如果不能發現在30個字符的終點。

select substr('oneone,twotwo, threethree, four,five,six,seven,eight,nine,ten,eleven,twelve',1,30) from dual ;-- First 30 characters. 

前30個字符生產:oneone,twotwo,threethree,缶 但是,我想預期的結果找到最近的分隔符「」的‘缶’不完整的條目之前並得到結果。

Expected Result:oneone,twotwo, threethree -- since "fou" is incomplete and thus should be excluded 

回答

1

有一個很好的機會,有一個簡單的解決方案,但

SQL> ed 
Wrote file afiedt.buf 

    1 with x as (
    2 select 'oneone,twotwo, threethree, four,five,six,seven,eight,nine,ten,eleven,twelve' str 
    3  from dual 
    4 ) 
    5 select substr(x.str, 
    6     1, 
    7     instr(substr(x.str, 1, 30), 
    8      ',', 
    9      -1) -1) 
10* from x 
SQL>/

SUBSTR(X.STR,1,INSTR(SUBS 
------------------------- 
oneone,twotwo, threethree 

將工作,當你打破它,相對容易。

由內而外的工作,

substr(x.str, 1, 30) 

採取串

instr(substr(x.str, 1, 30), 
     ',', 
     -1) 

給你最後一個逗號的在30字符串位置的前30個字符。那麼

substr(x.str, 
     1, 
     instr(substr(x.str, 1, 30), 
       ',', 
       -1) -1) 

從位置1到30個字符串中最後一個逗號之前的位置的字符串。

+0

謝謝賈斯汀......適合我!但是,如果有一種有效的方式(通過你的入場),我也很樂意聽到這一點。但是,現在這工作得很好。 – Casey