计算Oracle SQL中出现的字符数

时间:2012-05-27 06:27:23

标签: sql regex string oracle

如何计算Oracle中某列中特定字符出现的次数?例如,如果我的表FOO包含a,ABC,def2,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

2 个答案:

答案 0 :(得分:30)

通常的一个技巧是使用lengthreplace的组合:

select (length(your_col) - length(replace(your_col, ','))) from your_table;
没有第三个参数的

replace只会删除该字符。

答案 1 :(得分:22)

根据您的Oracle版本(11.1中引入regexp_count),我倾向于发现更明确的做

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

你可以在桌子上看到

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