为何REGEXP_COUNT匹配分号时无法正常工作?
OBIEE中REGEXP_COUNT统计分号数量报错的解决办法
你碰到的这个问题其实不是分号的正则语法问题,而是OBIEE表达式解析器对分号的特殊处理导致的——分号在OBIEE里默认是表达式分隔符,当你直接在EVALUATE的字符串参数里写'';''时,OBIEE可能会误把这个分号当成整个表达式的结束标记,从而抛出语法错误,而换成''a''时因为没有分号,所以解析正常。
这里有几个可行的解决方案:
方案1:用CHR函数代替直接写分号
分号的ASCII码是59,我们可以用CHR(59)来表示分号,这样就避免了在字符串中直接出现分号,绕开OBIEE的解析问题:
EVALUATE('REGEXP_COUNT(%1, CHR(59))', "Bibliographic Details"."Title")
如果你的需求是统计分号分隔的值的数量(比如n个分号对应n+1个值),记得在结果上加1:
EVALUATE('REGEXP_COUNT(%1, CHR(59)) + 1', "Bibliographic Details"."Title")
方案2:调整引号转义方式,明确分号是字符串的一部分
有些版本的OBIEE中,给分号前后加上空格,或者调整单引号的转义写法,可以让解析器正确识别分号属于字符串内容:
EVALUATE('REGEXP_COUNT(%1, '' ; '' )', "Bibliographic Details"."Title")
或者使用双引号包裹正则模式(如果底层数据库支持的话,比如Oracle允许用双引号作为字符串分隔符):
EVALUATE('REGEXP_COUNT(%1, ";")', "Bibliographic Details"."Title")
为什么换''a''就正常?
因为''a''里没有分号,OBIEE解析器会把整个REGEXP_COUNT(%1, ''a'')当成一个完整的字符串参数传递给底层数据库,正则引擎正常执行;而当出现'';''时,解析器误将分号识别为表达式结束符,导致EVALUATE的参数不完整,从而抛出语法错误。
内容的提问来源于stack exchange,提问作者Dina Kleper
相关产品推荐
相关产品推荐

