Informatica中如何用INSTR函数实现字段精确匹配
Informatica 精确模式匹配解决方案
原逻辑问题分析
原逻辑IIF (INSTR (upper(attr_value),upper(OBJECT_NAME)) > 0 ,1, 0 )仅判断字符串包含关系,会出现非精确匹配(例如短字符串test_INC.MC_INS_SO_ST会匹配到包含它的长字符串test_INC.MC_INS_SO_STAT),无法满足精确匹配需求。
调整后的实现方案
针对示例中attr_value的格式(目标对象被exec '和';包裹),提供两种精确匹配方案:
方案1:正则表达式匹配(推荐,支持Informatica 10.2及以上版本)
利用REGEXP_INSTR函数匹配完整的目标对象格式,确保精确匹配:
IIF( OBJECT_NAME IS NOT NULL AND REGEXP_INSTR(upper(attr_value), 'EXEC ''(' || upper(OBJECT_NAME) || ');', 1, 1, 0, 'i') > 0, 1, 0 )
- 逻辑说明:匹配
exec '开头、完整OBJECT_NAME、';结尾的固定模式,同时过滤OBJECT_NAME为空的记录 - 优势:代码简洁,适配类似格式的字符串匹配
方案2:字符串函数组合匹配(兼容低版本Informatica)
若不支持正则,通过字符串截取+精确比较实现:
IIF( OBJECT_NAME IS NOT NULL AND INSTR(upper(attr_value), 'EXEC ''') > 0 AND INSTR(upper(attr_value), ''';', INSTR(upper(attr_value), 'EXEC ''') + 6) > 0 AND upper(SUBSTR( attr_value, INSTR(upper(attr_value), 'EXEC ''') + 6, INSTR(upper(attr_value), ''';', INSTR(upper(attr_value), 'EXEC ''') + 6) - (INSTR(upper(attr_value), 'EXEC ''') + 6) )) = upper(OBJECT_NAME), 1, 0 )
- 逻辑说明:
- 排除
OBJECT_NAME为空的记录 - 定位
exec '和后续';的位置,截取中间的字符串 - 将截取内容与
OBJECT_NAME转大写后精确比对
- 排除
使用方式
将上述逻辑放入表达式转换生成匹配标记字段,或直接在过滤器转换中使用该逻辑过滤记录,即可得到仅包含精确匹配的结果集。
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

