计算Oracle SQL中字符的出现次数

计算Oracle SQL中字符的出现次数,sql,regex,string,oracle,Sql,Regex,String,Oracle,如何计算Oracle中某个特定字符在列中出现的次数?例如,如果我有一个表FOO,其中包含a、ABC、def和2,3,4,5等数据,我想计算逗号在数据中出现的次数 CREATE TABLE foo ( str varchar2(30) ); INSERT INTO foo VALUES( 'a,ABC,def' ); INSERT INTO foo VALUES( '2,3,4,5' ); commit; 我想要的输出是 str cnt a,ABC,def 2 2,3,

如何计算Oracle中某个特定字符在列中出现的次数?例如,如果我有一个表
FOO
,其中包含
a、ABC、def
2,3,4,5
等数据,我想计算逗号在数据中出现的次数

CREATE TABLE foo (
  str varchar2(30)
);

INSERT INTO foo VALUES( 'a,ABC,def' );
INSERT INTO foo VALUES( '2,3,4,5' );
commit;
我想要的输出是

str         cnt
a,ABC,def   2
2,3,4,5     3

通常的技巧之一是将
长度
替换
结合使用:

select (length(your_col) - length(replace(your_col, ','))) from your_table;

如果没有第三个参数,只需删除字符。

根据您的Oracle版本(
regexp\u count
是在11.1中引入的),我倾向于更清楚地执行以下操作

SELECT regexp_count( <<column_name>>, ',' )
  FROM <<table_name>>

使用pl/sql我得到了。不使用oracle sql获得..尝试这个链接中的选项@Sharath:我认为这个问题应该与stackoverflow中的不同问题一起出现。。。[仅在Oracle Database 11g+Hi中,当我尝试从dual中选择regexp_计数('AB | C | D%E','|')时,返回了9。为什么管道会出现这种情况?@Mistu4u,您需要转义管道,因为这是正则表达式中的保留字符(句点和其他字符相同):
从dual中选择regexp_计数('AB | C | D%E','\\\'124;;
SQL> ed
Wrote file afiedt.buf

  1  select str, regexp_count( str, ',' )
  2*   from foo
SQL> /

STR                            REGEXP_COUNT(STR,',')
------------------------------ ---------------------
a,ABC,def                                          2
2,3,4,5                                            3