Как сложить числа из строки с разделителем / (слэш)?

Рейтинг: 0Ответов: 3Опубликовано: 03.02.2023

У меня есть таблица, содержащая следующую информацию:

Table:

  1. Первая строка:

3/2/5/1

  1. Вторая строка

2/9/4/1

  1. Третья строка

5/4

Результат должен быть таким:

  1. 1 Строка: 11
  2. 2 Строка: 16
  3. 3 Строка: 9

Буду благодарен за помощь!

Ответы

▲ 1

Пожалуйста, попробуйте следующий метод, используя токенизацию через xmltable().

SQL

with rs(id, tokens) as
( 
    select 1, '3/2/5/1' from dual
    union all
    select 2, '2/9/4/1' from dual
    union all
    select 3, '5/4' from dual
)
select id, sum(cast(trim(COLUMN_VALUE) as int)) as "sum"
from rs, xmltable(('"' || REPLACE(tokens, '/', '","') || '"'))
group by id

Результат

id sum
1 11
2 16
3 9
▲ 0

.Если смотреть в документацию, то можно найти следующие вещи:

https://docs.oracle.com/database/121/SQLRF/functions164.htm#SQLRF06303
https://docs.oracle.com/database/121/SQLRF/functions167.htm#SQLRF00697
https://docs.oracle.com/database/121/SQLRF/functions227.htm#SQLRF06140
▲ 0

Могу предложить вот такой вариант:

with MYTABLE AS (
    select '4/5/6' qw from dual
    union all
    select '4/5/6/7' qw from dual
)
select t.qw,
  SUM(trim(regexp_substr(t.qw, '[^/]+', 1, lvl.column_value))) AS SUMMA
from 
  MYTABLE t,
  table(
    cast(
      multiset(
        select level from dual 
        connect by level <= LENGTH(regexp_replace(t.qw, '[^/]+')) + 1
      ) as sys.OdciNumberList
    )
  ) lvl
GROUP BY t.qw;