当前位置:   article > 正文

oracle获取特定字符串在字符串中出现的次数-translate, regexp_count_oracle统计字符串中某个字符出现的次数

oracle统计字符串中某个字符出现的次数

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

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

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

方式一, regexp_count函数:

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

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

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

结果如下图:

 

方式二, translate函数:

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

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号