如何计算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
答案 0 :(得分:30)
通常的一个技巧是使用length
和replace
的组合:
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