模式匹配并提取固定长度文件以与不同的表列进行比较

时间:2013-07-15 17:51:00

标签: teradata

提前感谢您通过此博客提供帮助。 我正在研究Teradata SQL的要求,需要帮助。以下是详细信息。

1. S_SRV_REQ_X has a column ATTRIB_47 which has different values like below.
Record 1: ,233650289942,803632139926
Rec 2: ,307503494667,,657001028536
Rec 3: 010000768233,010000768241,
Rec 4: 010000768233,010000768241,
Rec 5:,,,517971957017,
Rec 6: ,,002512117934,301040153878,,573977796362
Rec 7: ,002402799494,,,,,,,
and so on..

上面是访问卡号,我必须在不同的表列中查看S_ASSET表,列:SERIAL_NUM(每行只有一个记录)并在S_ASSET表中查找该序列号的状态并填充SR_NUM仅适用于已断开连接的卡。

有什么方法可以只为访问卡号码进行模式匹配,并为DISC卡填充SR_NUM?

访问卡号码始终为12位数,并且以逗号分隔。但是逗号可以是记录中的任何位置。 ATTRIB_47列的最大长度为255,因此任何记录都可以有最多15张以上的卡。

我应该在where子句中有这个条件。有人可以就此问题提出一些想法吗?

条件:

AND SSRY.CST_OU_ID = s_asset.owner_accnt_id;
AND S_ASSET = S_SRV_REQ_X.ATTRIB_47(do pattern match here to look for each access card numbers in the table).

请帮忙。

1 个答案:

答案 0 :(得分:0)

如果使用相等的附加条件,您可以简单地使用LIKE: SSRY.CST_OU_ID = s_asset.owner_accnt_id AND S_SRV_REQ_X.ATTRIB_47喜欢'%'|| S_ASSET || '%'

但是,如果这是唯一的连接条件,您将获得产品连接,这将为大型表消耗大量CPU。在这种情况下,在加入之前更好地分割行中的值,这取决于您的Teradata版本,这可能或多或少容易。

顺便说一句,你可能知道,一个重复的团体违反了第一范式,因此是非常糟糕的做法。

迪特