Вы можете использовать xmltable
для создания строк из строки:
Принимаются дополнительные номера.
select sum(to_number(column_value)) as SOMME from xmltable(REPLACE('3/5/7', '/', ','));
Создайте фиктивные строки (ниже: SELECT ROWNUM pos FROM dual CONNECT BY LEVEL <= 10
), больше, чем количество элементов, которое вы ожидаете когда-либо иметь. Здесь я использовал 10, вы можете сделать 100 или 1000, если хотите. Пометьте каждую строку цифрой ROWNUM. Затем используйте это как операнд в функции SUBSTR
. Это можно сделать и с помощью SUBSTR_REGEXP
, возможно, более лаконично. Это будет токенизировать вашу строку. Затем все, что вам нужно сделать, это агрегировать результаты с помощью SUM.
SELECT SUM(item)
FROM (SELECT value,
pos,
SUBSTR(value,INSTR(value,'/',1,pos)+1,INSTR(value,'/',1,pos+1)-(INSTR(value,'/',1,pos)+1)) item
FROM (SELECT '/'||'3/5/7'||'/' value from dual),
(SELECT ROWNUM pos FROM dual CONNECT BY LEVEL <= 10))
WHERE item IS NOT NULL
Всегда ли в строках будет ровно три числа? Можете ли вы добавить больше образцов данных? Обратите внимание, что раньше Oracle не поддерживал массивы.