Tady to je:
select length('123-345-566') - length(replace('123-345-566','-',null))
from dual;
Technicky vzato, pokud řetězec, který chcete zkontrolovat, obsahuje pouze znak, který chcete počítat, výše uvedený dotaz vrátí hodnotu NULL; následující dotaz dá správnou odpověď ve všech případech:
select coalesce(length('123-345-566') - length(replace('123-345-566','-',null)), length('123-345-566'), 0)
from dual;
Konečná 0 v coalesce
zachytí případ, kdy počítáte do prázdného řetězce (tj. NULL, protože length(NULL) =NULL v ORACLE).