Разбор второго слова в строке, в Oracle - PullRequest
0 голосов
/ 25 февраля 2010

Мне нужно написать немного SQL, который анализирует второе слово любой заданной строки или, если нет пробела, всю строку.

логика

«XXX YYYYY ZZZZZ» вернет YYYY,

«XXX YYY» вернет YYY и

«XXXXXX» вернет XXXXXX.

Есть предложения? Есть ли способ использовать SUBSTR и 2 позиции в строке? Скорее используя длину.

Большое спасибо

Ответы [ 2 ]

3 голосов
/ 25 февраля 2010
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 голосов
/ 18 декабря 2015

Это может быть немного проще, если вы знаете о регулярных выражениях:

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

FROM DUAL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...