2017-02-11 3 views
0

Я самоучка PL/SQL писателя, который является относительно новым для кодирования. Я знаю, как выполнять основные функции, но не имел никакого формального обучения и, как правило, Google, чтобы решить любые проблемы, с которыми я сталкиваюсь. В большинстве случаев я просто присоединяюсь к различным таблицам или представлениям в PL/SQL-разработчике, чтобы сделатьКак разбить столбец из одной таблицы с разделителем на несколько столбцов в новой таблице?

Я пытаюсь разбить строку из таблицы на основе серии из трех разделителей, в данном случае «>», (включая пробелы). Например, я хочу вывести местоположение «США> Калифорния> Лос-Анджелес» из таблицы «Местоположения» и разбить ее на три разных столбца (Страна, Штат и Город). Однако количество повторных разделителей может меняться. Иногда это может быть просто США> Калифорния, а иногда это может быть США> Калифорния> Лос-Анджелес> Комптон.

Я хочу взять эту колонку в одной таблице

[Расположение]

[США> Калифорния> Лос-Анджелес]

и вставить трех колонок его в другой таблице

[ Страна] [Государство] [Город]

[США] [Калифорния] [Лос-Анджелес]

До сих пор мне удалось обойтись только с помощью запросов, а не функций/более сложных методов. Если есть способ сохранить это простое и как запрос, я бы очень признателен за понимание! Опять же, я использую PL/SQL-разработчик, поэтому я знаю, что ограничивает некоторые функции, которые я могу использовать.

ответ

0

не слишком хорошо, но должно работать для вас:

insert into <your table 2> (Country, State, City) 
    select trim(REGEXP_SUBSTR(Location, '^([^>])*')), 
      trim(REGEXP_REPLACE(REGEXP_SUBSTR(Location, '>([^>])*'), '>', '')), 
      trim(REGEXP_REPLACE(REGEXP_SUBSTR(Location, '>([^>])*', 1, 2), '>', '')) 
     from <your table 1>; 

С уважением