Как сложить числа из строки с разделителем / (слэш)?
У меня есть таблица, содержащая следующую информацию:
Table:
- Первая строка:
3/2/5/1
- Вторая строка
2/9/4/1
- Третья строка
5/4
Результат должен быть таким:
- 1 Строка: 11
- 2 Строка: 16
- 3 Строка: 9
Буду благодарен за помощь!
Ответы (3 шт):
Автор решения: Kerry The King
→ Ссылка
.Если смотреть в документацию, то можно найти следующие вещи:
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
Автор решения: SwaD
→ Ссылка
Могу предложить вот такой вариант:
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;
Автор решения: Yitzhak Khabinsky
→ Ссылка
Пожалуйста, попробуйте следующий метод, используя токенизацию через 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 |