oracle获取特定字符串在字符串中出现的次数

您所在的位置:网站首页 countif统计重复第几次 oracle获取特定字符串在字符串中出现的次数

oracle获取特定字符串在字符串中出现的次数

2024-02-29 09:50| 来源: 网络整理| 查看: 265

需求一:获取字符串中特定字符逗号","在字符串",abc,,,d,,ef,"中出现的次数(共出现7次)。

需求二: 获取字符串中特定字符串“@-”在字符串“@-ab@@cd--ef@h-j”中出现的次数(工出现1次)

--------------------需求一---------------

方式一, regexp_count函数:

语法: regexp_count(source_str, target_char [, position [, match_param]]) source_str:包含特定字符的字符串 target_char:特定字符 position: 从哪个下标开始搜索,可省略,但需>=1 match_param: 正则的匹配模式参数, 'i':忽略大小写; ‘c’或不配置该参数:不忽略大小写;此外还有‘n’、‘m’、‘x’等参数。

使用oracle11g提供的regexp_count函数,直接获取特定字符在字符串中出现的次数。

select regexp_count(',abc,,,Ad,,ef,', ',') from dual;

结果如下图:

 

方式二, translate函数:

语法:translate(source_str, from_str, to_str) source_str:待处理的字符串 from_str:需要转义的字符拼接而成的串 to_str:转义后的字符拼接而成的串 解释: 0. 三个字符串中任意一个为null,其结果都是null 1. from_str和to_str的对应关系,从左往右用一一对应, 对于在from_str中出现的重复字符, 且重复字符的下标在to_str该下标有值时,会同时忽略重复字符在from_str和to_str下标的值。 既重复字符以第一次出现的替换规则为准。 2. from_str的长度大于to_str的长度时,对于from_str中多出来的字符可以理解为将其转换为空字符串。 多于字符串中已经有转义映射关系的字符,按照之前的映射关系转义。 3. 按照转义规则替换source_str中的字符,并得到最终的结果。 (以上解释比较绕,可以简单的将from_str和to_str看做等长,长度不够的位用空字符代替,然后再转义source_str)

现将source_str中非特定字符删掉,然后再统计长度。(注意:需要在from_str前面拼接上特定字符)

删掉source_str中非特定字符的内容,如下图:

统计特定字符在source_str中出现的次数,

select length(translate(',abc,,,d,,ef,', ',' || ',abc,,,d,,ef,', ',')) from dual;

如下图:

 

方式三,组合几个函数的结果:

select length(',abc,,,d,,ef,') - length(replace(',abc,,,d,,ef,', ',','')) from dual;

如下图:

 

--------------------需求二---------------

这里不要使用translate函数, 只有极少数情况下能满足需求。

组合使用length函数,regexp_replace函数获取结果,如下图:

替换字符串中的特定字符串:

计算出现的次数:

select (length('@-ab@@cd--ef@h-j') - length(regexp_replace('@-ab@@cd--ef@h-j','@-'))) / length('@-') from dual;



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3