如何在Redshift表中统计字符串中||的出现次数(不用替换法)
Redshift中统计字符串里
||出现次数的正则解决方案 问题根源
|是正则表达式的分支匹配元字符,直接在REGEXP_COUNT中传入'||'或'|'时,会被正则引擎解析为特殊语法,无法匹配字面意义上的|字符,自然得不到正确的连续||计数结果。
可行解决方案
以下几种方法无需替换原字符串,直接通过正则匹配即可得到正确结果:
- 转义元字符
在正则中用\转义|,由于SQL字符串中\本身需要转义(写成\\),因此最终正则表达式为'\\|\\|':
REGEXP_COUNT(dcsis.value, '\\|\\|')
Redshift会将字符串中的\\解析为单个\,正则引擎接收到的是\|,代表字面的|,两个连起来就能精准匹配连续的||。
- 使用字符类匹配
将|放入正则字符类[]中,此时元字符会失去特殊意义,可直接匹配字面|。可以写成两个字符类连写,或用量词{2}简化:
-- 写法1:两个字符类连写 REGEXP_COUNT(dcsis.value, '[|][|]') -- 写法2:用量词匹配连续2个|,更简洁 REGEXP_COUNT(dcsis.value, '[|]{2}')
- 结合chr()与正则量词
利用chr(124)生成|字符,配合正则量词{2}指定匹配连续两次,避免直接写|带来的元字符问题:
REGEXP_COUNT(dcsis.value, '(' || chr(124) || '){2}')
内容的提问来源于stack exchange,提问作者Chernusha
相关产品推荐
相关产品推荐

