Какая версия Oracle?В 12.2 или более поздних версиях вы можете
select name, sum( to_number( text default 0 on conversion error ))
from your_table
group by name;
. В более ранних версиях я обычно предпочитаю что-то вроде
create or replace function safe_to_number( p_str in varchar2 )
return number
is
l_ret number;
begin
l_ret := to_number( p_str );
return l_ret;
exception
when others then
return null;
end;
select name, safe_to_number( text )
from your_table
group by name
Решения на основе регулярных выражений, которые ищут числа, могут работать, но они, как правило, усложняются.быстро.«1,00» может быть числом (при условии, что десятичный разделитель - это точка), «1,00,00» - нет, «-100» - это число, «1-00» - нет, и т. Д. Обычно вы можете играть с регулярным выражением.какое-то время, чтобы он работал с любыми имеющимися у вас данными, но трудно быть уверенным, что вы рассмотрели каждый случай.Если вы решите, что хотите обрабатывать особые случаи по-другому (то есть, у вас есть индийские пользователи, которые вводят сто тысяч как 1 000 000), вы можете обновить функцию, чтобы выполнить итерацию серии масок формата, прежде чем отказаться от преобразования.