2010-02-25 6 views
0

주어진 문자열의 두 번째 단어를 구문 분석하거나 공간이없는 경우 전체 문자열을 구문 분석하는 SQL을 작성해야합니다.문자열의 두 번째 단어 (Oracle에서 구문 분석)

논리가

'XXX의 YYYYY의 ZZZZZ'이다,

'XXX의 YYY를'YYYY를 반환 XXXXXX을 반환 YYY 및

'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

만들어 사용 (C, '', 1, 2) - instr (c, '', 1, 1) - 1 논리. 감사합니다. – fras85

+0

확실히 번거 로움입니다. MySQL에서는'SUBSTRING_INDEX()'함수를 사용하면 상당히 지저분해질 것입니다. –

+0

번거 로움이 있지만 오라클에서는 논리를 자신의 유틸리티 패키지에 넣으면 항상 사용할 수 있습니다. – Rene

-1

매우

감사 이것은 당신이 정규 표현식에 대해 알고 있다면 좀 더 간단 할 수있다 :은 "INSTR의

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

FROM DUAL 
관련 문제