Давайте начнем добавлять некоторые инструкции для создания примера данных.
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
Обратите внимание, что столбец RESULT создан с использованием тех же выражений, что и столбцы string_start и string_length.
Это также отвечает на вопрос A
Это даст вам начальные результаты, так что вы сможете выяснить, что произойдет внутри выражения. Затем поместите все в инструкцию DECODE
Пример 2:
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:
-- this removes the last 6 characters from the hello world string
select substr ( 'hello world', 1, length('hello world) - 6 )
Примите извинения за невозможность проверить код Oracle на реальном компьютере.