Proszę bardzo:
select length('123-345-566') - length(replace('123-345-566','-',null))
from dual;
Technicznie, jeśli ciąg, który chcesz sprawdzić, zawiera tylko znak, który chcesz policzyć, powyższe zapytanie zwróci NULL; następujące zapytanie da poprawną odpowiedź we wszystkich przypadkach:
select coalesce(length('123-345-566') - length(replace('123-345-566','-',null)), length('123-345-566'), 0)
from dual;
Ostatnie 0 w coalesce
przechwytuje przypadek, w którym liczysz w pustym ciągu (np. NULL, ponieważ length(NULL) =NULL w ORACLE).