2010-11-29 9 views
0

아래의 데이터를 먼저 참조하십시오. 설명 된대로 처음 두 열에서 HUB_NM, PRODUCT_NM 및 STRIP_NM 열을 계산해야합니다.함께 INSTR 및 SUBSTR 사용

DEAL_ORIGINATION EXCH_SYMBOL         HUB_NM  PRODUCT_NM   STRIP_NM 
---------------- ---------------------------------------------- ---------- --------------------- ------------ 
TT_ICE   IPE e-Gas Oil DEC 2010         IPE e-Gas Oil   DEC 2010 
GLOBEX   HO DEC 2010            HO     DEC 2010 
ICE NG   Firm Phys, ID, GDD - Transco-45 - Next Day Gas Transco-45 NG Firm Phys, ID, GDD Next Day Gas 
STUSCO_ICE  Brent Crude Futures - North Sea - Dec12     Brent Crude Futures DEC12 

어떻게 할 수 있습니까? 나는 내가 SUBSTR과 INSTR을 사용해야한다는 것을 알고 있지만 그것을 이해할 수는 없다.

가) EXCH_SYMBOL에서 HUB_NM 열 값을 얻는 방법?

If T.DEAL_ORIGINATION = 'ICE' 
then 
    Find 1st space dash space 
    Find 2nd space dash space 
    Display the word in between, no space at the end 
elsif T.DEAL_ORIGINATION in ('GLOBEX', 'TT_ICE', 'STUSCO_ICE') 
then 
    null; 
end if; 

B) EXCH_SYMBOL에서 PRODUCT_NM 열 값을 얻는 방법?

If T.DEAL_ORIGINATION in ('ICE', 'STUSCO_ICE') 
then 
    Display from 1st character to the 1st dash, no space at the end 
elsif T.DEAL_ORIGINATION in ('GLOBEX', 'TT_ICE',) 
then 
    Remove -9 caharacters from the end of the word and display the fornt word, no space at the end 
end if; 

C) EXCH_SYMBOL에서 STRIP_NM 열 값을 얻는 방법?

If T.DEAL_ORIGINATION in ('ICE', 'STUSCO_ICE') 
then 
    Find the 2nd space dash space 
    Display from then on to the end of the word, no space at the end 
elsif T.DEAL_ORIGINATION in ('GLOBEX', 'TT_ICE',) 
then 
    Display the last -8 caharacters from the end of the word, no space at the end 
end if; 
+1

표 또는 CTE 삽입을위한 샘플 표를 제공 할 수 있습니까? 샘플 데이터에서 머리 또는 꼬리를 만들 수 없습니다. – Harrison

+0

한 번 더 요청하십시오. 의도 한 외출의 A, B, C에 예제를 넣을 수 있습니까? 오라클의 어떤 버전을 사용하고 있습니까? (정규식 응답에 불리한가? REGEXP_SUBSTR & regexp_replace가 사용자가 찾는 대답 일 수 있습니다. – Harrison

답변

0

샘플 데이터를 만들기위한 지침을 추가하기 시작합니다.

CREATE TABLE mytab 
( 
DEAL_ORIGINATION VARCHAR2(100), 
EXCH_SYMBOL VARCHAR2(100), 
HUB_NM VARCHAR2(100), 
PRODUCT_NM VARCHAR2(100), 
STRIP_NM VARCHAR2(100) 
); 

INSERT INTO mytab (DEAL_ORIGINATION, EXCH_SYMBOL, HUB_NM, PRODUCT_NM, STRIP_NM) 
VALUES ('TT_ICE', 'IPE e-Gas Oil DEC 2010', null, 'IPE e-Gas Oil', 'DEC 2010'); 

INSERT INTO mytab (DEAL_ORIGINATION, EXCH_SYMBOL, HUB_NM, PRODUCT_NM, STRIP_NM) 
VALUES ('GLOBEX', 'HO DEC 2010',null, 'HO', 'DEC 2010'); 

INSERT INTO mytab (DEAL_ORIGINATION, EXCH_SYMBOL, HUB_NM, PRODUCT_NM, STRIP_NM) 
VALUES ('ICE NG','Firm Phys, ID, GDD - Transco-45 - NEXT DAY Gas', 'Transco-45', 'NG Firm Phys, ID, GDD', 'NEXT DAY Gas'); 
INSERT INTO mytab (DEAL_ORIGINATION, EXCH_SYMBOL, HUB_NM, PRODUCT_NM, STRIP_NM) 
VALUES ('STUSCO_ICE', 'Brent Crude Futures - North Sea - Dec12', null, 'Brent Crude Futures', 'DEC12'); 

물론 instr 및 substr 결과가 어떻게되는지 알아 내려고 노력해야합니다. 게다가 괄호 만 생각하거나 적어서 당신은 그것을 이해하지 못할 것입니다.

내 조언은 다음과 같이 부분적인 결과를 임시 선택 명령을 작성하는 것입니다 :

SELECT deal_origination, exch_symbol, 
     INSTR(exch_symbol,' - ')+3 as string_start, 
     INSTR(SUBSTR(EXCH_SYMBOL,INSTR(exch_symbol,' - ')+3) , ' - ')-1 string_length , 
     SUBSTR(exch_symbol, INSTR(exch_symbol,' - ')+3, INSTR(SUBSTR(EXCH_SYMBOL,INSTR(exch_symbol,' - ')+3) , ' - ')-1) as RESULT 
FROM mytab 

은 결과 열이 string_start 및 STRING_LENGTH 열 같은 표현을 사용하여 구성되어 있습니다. 당신이 표현 내부에 무슨 일이 일어날 지 알아낼 수 있도록

이 또한 질문

이 당신에게 초기 결과를 얻을 수에 대한 답변. 사용 마지막으로

decode (DEAL_ORIGINATION, 
    'ICE', 'results in case of ICE', 
    'GLOBEX', 'results in case of GLOBEX', 
    null) 
-- the last null is the default condition 

이 작품의 마지막에 9 개 문자를 제거하기 위해 길이 기능을

예 3 : 그런 다음

예에게 DECODE 명령으로이 모든 것을 넣어

-- this removes the last 6 characters from the hello world string 
select substr ('hello world', 1, length('hello world) - 6) 

실제 컴퓨터에서 Oracle 코드를 테스트 할 수 없다는 사과의 말씀을 수락하십시오.