我正在寻找一个有趣的谜语的一点帮助。刚发现变量长度id嵌入在不符合要求的文本字段中。此ID对于系统链接至关重要。有一个4-12位数字id的维护列表,它相当准确,因此可以在描述性注释字段VarChar2(30)中与嵌入的id内匹配
我的目标平台是Oracle 12c& DataStage 8.5执行此操作。所需的结果是只需要一个具有适当的4-12位数字id的列,并列出任何非匹配的null。
扫描NOTE_DESC字符以查找字符串中的连续数字。在数字字符串的每个项中检查结果值对查找列表。就像是 loop1(表中的每一行)... loop2(每个NOTE_DESC字符)...如果是数字然后输入loop3(每个listvalue)来检查列表中的每个数字,用嵌套的if语句删除长度(regexp_substr(substr(trim(t .NOTE_DESC),<>,6),'[0-9] +'))=<>
这种方法是资源密集型的,因为查找列表中有数百个。我很好奇是否有人遇到过这样的问题,或者有任何代码可以解决这个问题。
数据示例: 独立维护的查找不同IDS的列表:{123,1234,5678,12345,123456,1234567}同时这里是NOTE_DESC字段示例的列表:
答案 0 :(得分:0)
这可能(或可能不)帮助。首先,我建立两个"表"通过WITH子句(CTE,因子子查询)。我向note_desc
添加了一些字符串以进行更多测试,包括一个有两个匹配的字符串。
然后我"准备"数据通过提取最大数字子串,在note_desc
(idx
列)中跟踪它们的顺序。最后,我比较个人" id" s"从note_desc
中针对ids
表中的ID提取,最后我使用note_desc
"表"进行右外连接为没有任何匹配的字符串添加行。
在实际使用中,您可以过滤idx = 1
(如果您只需要每个字符串中的第一个匹配项),并且您可以选择不在输出中显示idx
列。我把他们都留在了,所以你看到了一切的样子;删除你不需要的东西。
with
note_desc ( str ) as (
select 'JS 1234 Closed' from dual union all
select '123456 May Adjudication' from dual union all
select 'Closing Bal 5678' from dual union all
select '12-3 Bal Adjustment' from dual union all
select '1-23-45 Johnson' from dual union all
select 'Vendor 123489' from dual union all
select '2345' from dual union all
select '' from dual union all
select 'abckm' from dual union all
select '1234-5678 xyz' from dual
),
ids ( id ) as (
select 123 from dual union all
select 1234 from dual union all
select 5678 from dual union all
select 12345 from dual union all
select 123456 from dual union all
select 1234567 from dual
),
prep ( str, idx, id ) as (
select str, level, regexp_substr(str, '\d+', 1, level)
from note_desc
connect by regexp_substr(str, '\d+', 1, level) is not null
and prior str = str
and prior sys_guid() is not null
)
select n.str, p.idx, p.id
from prep p
inner join ids i on p.id = i.id
right outer join note_desc n on n.str = p.str
;
输出(未排序;请注意NULL)
STR IDX ID
----------------------- ---------- --------
1234-5678 xyz 1 1234
1234-5678 xyz 2 5678
123456 May Adjudication 1 123456
Closing Bal 5678 1 5678
JS 1234 Closed 1 1234
Vendor 123489
12-3 Bal Adjustment
1-23-45 Johnson
2345
abckm
11 rows selected.