2010-11-29 8 views
0

以下のデータを参照してください。最初の2列から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を使うべきだが、私はそれを理解することはできないことを知っている。

A)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に例を入れることができますか?どのOracleのバージョンを使用しているのですか(正規表現の回答に逆らっていますか?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列と同じ表現を使って作られていることに注意してください。

これも質問

あなたが式の中何が起こるかを把握することができるようになりますので、これは、あなたの最初の結果が得られますが答えます。

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

:最後に

例3 LENGTH関数を使用する作業の最後に9つの文字を削除する

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

:次にDECODE命令

例2にすべてをかけます実際のマシンでOracleコードをテストできないという謝罪を受け入れてください。

関連する問題