web-dev-qa-db-ja.com

Oracle SQLでの文字の出現回数のカウント

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
7
Sharath

これに対する通常のトリックの1つは、lengthreplaceの組み合わせを使用することです。

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

replace 3番目の引数を指定しないと、文字が削除されます。

30
Mat

Oracleのバージョンに応じて(regexp_countは11.1)で導入されました。

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
22
Justin Cave