2010-02-25 109 views
0

我需要編寫一些SQL來解析任何給定字符串的第二個單詞,或者如果沒有空格,整個字符串。解析字符串中的第二個字,在Oracle中

的邏輯是

'XXX YYYYY ZZZZZ' 將返回YYYY,

'XXX YYY' 將返回YYY和

'XXXXXX' 將返回XXXXXX。

有什麼建議嗎?有沒有使用SUBSTR和字符串中的2個位置的方法?而是使用長度。

非常感謝

回答

3
case 
    -- at least two words 
    when instr(c, ' ', 1, 1) > 0 then 
     case 
      -- at least three words 
      when instr(c, ' ', 1, 2) > 0 then 
       -- return text between first and last space 
       substr(
        c 
       , instr(c, ' ', 1, 1)+1       
       , instr(c, ' ', 1, 2) - instr(c, ' ', 1, 1) - 1 
       ) 
      else 
      -- return 2nd word (text after first space) 
       substr(c, instr(c, ' ', 1, 1)+1) 
     end 
    -- one word, return it 
    else c 
end 
+0

利用了「INSTR的(C, '',1,2) - instr(c,'',1,1) - 1「邏輯。 謝謝你。 – fras85 2010-02-25 12:41:39

+0

這是一個麻煩,這是肯定的。在MySQL中,我可能會使用'SUBSTRING_INDEX()'函數,這會使其不那麼混亂。 – 2010-02-25 13:54:28

+0

這可能很麻煩,但在Oracle中,您將自己的邏輯放在自己的實用程序包中,並且您隨時都可以使用它。 – Rene 2010-03-01 07:18:02

-1

這可能是,如果你知道有關正則表達式稍微簡單:

SELECT CASE WHEN REGEXP_COUNT('STRING', ' ') > 0 THEN 
    REGEXP_SUBSTR ('STRING', '(\s)(\S*)',1,1) 
ELSE 
    'STRING' 
END 

FROM DUAL