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
これに対する通常のトリックの1つは、length
とreplace
の組み合わせを使用することです。
select (length(your_col) - length(replace(your_col, ','))) from your_table;
replace
3番目の引数を指定しないと、文字が削除されます。
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