在Oracle中解析字符串中的第二个单词

时间:2010-02-25 12:16:44

标签: sql oracle10g

我需要编写一些SQL来解析任何给定字符串的第二个字,或者如果没有空格,则整个字符串。

逻辑是

'XXX YYYYY ZZZZZ'将返回YYYY,

'XXX YYY'将返回YYY和

'XXXXXX'将返回XXXXXX。

有什么建议吗?有没有办法使用SUBSTR和字符串中的2个位置?而是使用长度。

非常感谢

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:-1)

如果您了解正则表达式,这可能会更简单:

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

FROM DUAL