Удалить символ из динамической строки - PullRequest
0 голосов
/ 29 мая 2019

У меня есть файл с некоторыми нежелательными значениями, и мне нужно избавиться от них при загрузке этого файла в таблицу. Приведу здесь несколько примеров. Файл разделен точкой с запятой, и последний столбец содержит эти ненужные значения.

2019-02-20;05377378;ABC+xY+++Rohit Anita Chicago
2019-02-20;05201343;ABC+xY++Gustav Russia
2019-02-20;07348738;ABC+xy+++Jain Ram Ambarnath

Теперь последний столбец, который мне нужно загрузить без значения ABC + xY +++ . но некоторые строки у меня есть ABC + xY +++, а некоторые ABC + xY ++. Любое предложение, чтобы избавиться от этого. что означает 2 или 3 раза + доступно

Я использую informatica powercenter для загрузки этого файла. в выражении мне нужно создать некоторую функцию substr / instr. который я могу поставить здесь в oracle sql, чтобы быстро понять, правильно ли поступает значение.

enter image description here

и мой ожидаемый результат -

enter image description here

Любое предложение, пожалуйста.

Спасибо, Bithun

Ответы [ 4 ]

2 голосов
/ 29 мая 2019

Я думаю, что вы ищете следующее:

WITH dat AS (SELECT '2019-02-20;05373487378;ABC+xY++Rohit Anita Chicago' AS adress FROM dual)
SELECT regexp_REPLACE(adress, '(.*);ABC\+x[yY]\+{2,3}(.*)','\1;\2') FROM dat
1 голос
/ 30 мая 2019

Это решение.

substr
    ( 
        Address,
        0, 
        instr(Address ,';',-1)
    )
    ||
substr
    (
        Address,
        instr(Address ,'+',-1)
    )

Вы можете добавить +1 в начальную / конечную позицию субстрата в зависимости от потребностей.

1 голос
/ 29 мая 2019

Я не уверен, что понимаю ваш вопрос, но это сделало бы то, о чем вы спрашиваете, работало бы в SQL и в выражении Infa.

with myrecs as
(select '2019-02-20;870789789707;ABC+xY++Gustav Russia' as myfield from dual union 
all
 select '2019-02-20;870789789707;ABC+xY+++Carroll Iowa' as myfield from dual)

 select myfield,

    substr(myfield,1, instr(myfield,';',-1)) ---will select everything up to, and including the final semicolon
    ||--concatenate
    substr(myfield,instr(myfield,'+',-1)+1) as yourfield --will select everything after the final plus sign
 from myrecs;

OUTPUT:
myfield                                         yourfield
2019-02-20;870789789707;ABC+xY++Gustav Russia   2019-02-20;870789789707;Gustav Russia
2019-02-20;870789789707;ABC+xY+++Carroll Iowa   2019-02-20;870789789707;Carroll Iowa
0 голосов
/ 30 мая 2019

Informatica PowerCenter предоставляет несколько функций для работы с регулярными выражениями. В этом случае вам понадобится REG_EXTRACT.

Хорошее описание функции уже доступно - проверьте и подтвердите :)

В соответствии с этим вам, скорее всего, потребуется определить порт, например:

your_output_port=REG_EXTRACT(ADDRESS, '([^\+]+)$', 1)

Вот , как я это проверил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...