주어진 문자열의 두 번째 단어를 구문 분석하거나 공간이없는 경우 전체 문자열을 구문 분석하는 SQL을 작성해야합니다.문자열의 두 번째 단어 (Oracle에서 구문 분석)
논리가
'XXX의 YYYYY의 ZZZZZ'이다,
'XXX의 YYY를'YYYY를 반환 XXXXXX을 반환 YYY 및
'XXXXXX'를 반환합니다.
제안 사항? 문자열 내에 SUBSTR과 2 개의 위치를 사용하는 방법이 있습니까? 오히려 길이를 사용하십시오.
주어진 문자열의 두 번째 단어를 구문 분석하거나 공간이없는 경우 전체 문자열을 구문 분석하는 SQL을 작성해야합니다.문자열의 두 번째 단어 (Oracle에서 구문 분석)
논리가
'XXX의 YYYYY의 ZZZZZ'이다,
'XXX의 YYY를'YYYY를 반환 XXXXXX을 반환 YYY 및
'XXXXXX'를 반환합니다.
제안 사항? 문자열 내에 SUBSTR과 2 개의 위치를 사용하는 방법이 있습니까? 오히려 길이를 사용하십시오.
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
매우
감사 이것은 당신이 정규 표현식에 대해 알고 있다면 좀 더 간단 할 수있다 :은 "INSTR의
SELECT CASE WHEN REGEXP_COUNT('STRING', ' ') > 0 THEN
REGEXP_SUBSTR ('STRING', '(\s)(\S*)',1,1)
ELSE
'STRING'
END
FROM DUAL
만들어 사용 (C, '', 1, 2) - instr (c, '', 1, 1) - 1 논리. 감사합니다. – fras85
확실히 번거 로움입니다. MySQL에서는'SUBSTRING_INDEX()'함수를 사용하면 상당히 지저분해질 것입니다. –
번거 로움이 있지만 오라클에서는 논리를 자신의 유틸리티 패키지에 넣으면 항상 사용할 수 있습니다. – Rene