Как в Oracle SQL развернуть строку в столбец
Статьи про Oracle -> Программирование
Как в Oracle SQL развернуть строку в столбец
v:1.0 27.07.2014
Петрелевич Сергей
Давайте рассмотри пример преобразования данных SQL-запросом Oracle.
Создаем тестовую таблицу:
create table tTest ( id number, value varchar2(100) ); --Вставляем в нее строку insert into tTest(id,value) values(1,'value1;value2'); commit; --Смотрим, что получилось: select * from tTest; --запрос вернул: ID Value 1 value1;value2
На надо развернуть строку в столбец, т.е. SQL-запрос вместо одной строки
value1;value2должен вернуть две строки:
value1 value2Сделать это можно таким запросом:
select id, regexp_substr(t.value, '[^;]+', 1, level) vals from tTest t where t.id=1 connect by level <= length(regexp_replace(t.value, '[^;]+')) + 1;
Id vals 1 value1 1 value2Это нам и надо.
Дополнительно стоит отметить, что в этом запросе используется резулярное выражение
[^;]+т.е. все символы кроме ";" (используется как разделитель полей) и запрос генерации последовательности чисел.
Метки:
Комментарии.
Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: <a>, <b>, <i>, <br>.
Chalyshev | Jul 14, 2015 3:32:25 PM | |
Серега , вроде я это где то уже читал ) или писал , не помню уже ... | ||
Chalyshev | Jul 14, 2015 3:35:49 PM | |
в вобще есть отличная книга по SQL Энтони Моллиаро SQL Сборник рецептов | ||
Chalyshev | Jul 14, 2015 4:05:20 PM | |
считаю так же что в данном примере тема сисек раскрыта далеко не полностью ... select distinct id,level, regexp_substr(value, '[^;]+', 1, level) vals from ttest connect by regexp_substr(value, '[^;]+', 1, level) is not null; вот так полностью... | ||