如何在Cognos Oracle查询中实现字符串列多值模糊匹配检索
Cognos Oracle查询字符串列多值模糊匹配实现方案
问题场景
需要根据多值参数Focus的返回结果,模糊匹配project.proj_name列包含任意一个参数值的记录,原有写法仅支持单值匹配,无法适配多值场景。
正确实现代码
'-99' IN (#promptmany('Focus', 'string', '-99')#) OR REGEXP_LIKE( proj_name, REPLACE(REPLACE(#promptmany('Focus', 'string', '-99')#, ''',''','|'),'''','') )
实现逻辑说明
#promptmany('Focus', 'string', '-99')#在选中示例的4个参数值时,会输出格式为'TRAINING','OMNIA','COUNTER','PROGRAM'的字符串- 第一层
REPLACE将参数值之间的分隔符','替换为正则逻辑的「或」运算符|,处理后得到'TRAINING|OMNIA|COUNTER|PROGRAM' - 第二层
REPLACE去掉字符串首尾多余的单引号,最终得到正则匹配串TRAINING|OMNIA|COUNTER|PROGRAM REGEXP_LIKE(proj_name, 处理后的正则串)等价于proj_name LIKE '%TRAINING%' OR proj_name LIKE '%OMNIA%' OR ...的匹配逻辑,完全满足多值模糊匹配需求
注意事项
如果你的Focus参数值可能包含.、+、*、?、|等正则特殊字符,需要额外对特殊字符做转义处理,无特殊字符时上述代码可直接使用。
内容的提问来源于stack exchange,提问作者vchitta
相关产品推荐
相关产品推荐

