比如‘a,b,c’這個字符串中計算子串個數,我們一般都是計算其中的逗號個數加1
create view v as select 'a,b,c' as str from dual;
oracle11g給出了新函數regexp_count
select regexp_count(str,',')+1 as cnt from v;
而在11g之前沒有這個函數,我們可以用regexp_replace代替
select length(regexp_replace(str,'[^,]'))+1 as cnt from v;
還可以使用translate
select length(translate(str,','||str,','))+1 as cnt from v;
如果分隔符有一個以上(a$#b$#c$#),那就要把計算出來的長度再除以分隔符長度
select length(translate(str,'$#'||str,'$#'))/length('$#')+1 as cnt from v;
用regexp_count就不用考慮長度
select regexp_count(str,'\$#')+1 as cnt from v;
注:“\”進行轉義,"$"是通配符