どうぞ:
select length('123-345-566') - length(replace('123-345-566','-',null))
from dual;
技術的には、チェックする文字列にカウントする文字のみが含まれている場合、上記のクエリはNULLを返します。次のクエリは、すべての場合に正しい答えを与えます:
select coalesce(length('123-345-566') - length(replace('123-345-566','-',null)), length('123-345-566'), 0)
from dual;
coalesce
の最後の0 空の文字列でカウントしている場合をキャッチします(つまり、ORACLEではlength(NULL)=NULLであるため、NULL)。