0

我有一个包含一些垃圾值的文件,我需要在将该文件加载到表中时摆脱它们。在这里举个例子。文件以分号分隔,最后一列包含这些垃圾值。

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 中进行测试,以便快速了解值是否正确。

在此处输入图像描述

我的预期输出是

在此处输入图像描述

请有任何建议。

谢谢, 比通

4

4 回答 4

2

我认为您正在搜索以下内容:

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
于 2019-05-29T14:40:52.617 回答
1

我不确定我理解你的问题,但这会做我认为你问的事情,也可以在 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
于 2019-05-29T14:41:51.940 回答
1

这就是解决方案。

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

您可能需要根据需要在 substr 开始/结束位置添加 +1。

于 2019-05-30T16:24:58.080 回答
0

Informatica PowerCenter 提供了一些使用正则表达式的函数。在这种情况下,您将需要 REG_EXTRACT。

对该功能已有很好的描述-检查并投票:)

根据它,您很可能需要定义一个端口,例如:

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

这是我测试它的方法。

于 2019-05-30T06:44:02.837 回答