2012-08-02 91 views
3

我想根據長度以空格作爲分隔符來分割Oracle中的字符串。根據長度在oracle sql中分割字符串

例如,

MY_STRING="welcome to programming world" 

我的輸出應是

STRING1="welcome to " 
STRING2="programming " 

琴絃應該是一個最大長度爲13個字符。位置26之後的單詞可以忽略。

回答

1

你沒有提到你使用的是什麼版本的Oracle。如果您使用10g或以上,您可以使用regular expressions得到你需要的東西:

with spaces as (
select regexp_instr('welcome to programming world' || ' ' 
        , '[[:space:]]', 1, level) as s 
    from dual 
connect by level <= regexp_count('welcome to programming world' || ' ' 
           , '[[:space:]]') 
     ) 
, actual as (
select max(case when s <= 13 then s else 0 end) as a 
     , max(case when s <= 26 then s else 0 end) as b 
    from spaces 
     ) 
select substr('welcome to programming world',1,a) 
    , substr('welcome to programming world',a, b - a) 
    from actual 

此找到所有的空間的位置索引,然後找到一個最最接近但小於14.最後使用一個簡單的substr分割你的字符串。字符串將有一個尾隨空格,所以你可能想要trim這個。

您必須將您的字符串與空格連接以確保存在尾部空格,以便在字符串長度小於26個字符時最後一個單詞不會被刪除。

假設你使用的是早期版本,你可以與instrlength一起破解一些東西,但它不會很漂亮。

+0

非常感謝..這是我期待的笏!我正在使用Oracle 10g .. – user1501309 2012-08-02 09:50:12