Поменяйте поля внутри записи Oracle, используя разделитель пар * и разделитель элементов | - PullRequest
2 голосов
/ 24 ноября 2010

В таблице Oracle у меня есть запись с разделенными ПАРАМИ (строка, число):

Abc|3456*Def|7890*Ghi|9430*Jkl|3534

В предыдущем примере пары:

(Abc,3456)
(Def,7890)
(Ghi,9430)
(Jkl,3534)

Я бынравится изменять каждую запись, меняя порядок каждой пары (сначала число, затем строка):

3456|Abc*7890|Def*9430|Ghi*3534|Jkl

Разделителем двух элементов пары является труба (|).СЕПАРАТОР МЕЖДУ ПАРЫ - звездочка (*).

Как я могу достичь своей цели - поменять порядок каждой пары?

Заранее благодарим за сотрудничество!

1 Ответ

4 голосов
/ 24 ноября 2010

Попробуйте использовать регулярные выражения ... теперь у вас есть две проблемы:

select 
  cola, 
  regexp_replace(cola, '([^*|]*)\|([^*|]*)(\*|$)','\2|\1\3') as swapped_col
from (
  select '3456|Abc*7890|Def*9430|Ghi*3534|Jkl' cola from dual
)

По сути, регулярное выражение говорит, что ищите все, что не является |или *, пока не найдете |, затем найдите все, что не является |или * пока вы не найдете * или затем конец строки.Затем поменяйте местами два бита и завершите его символом, который вы нашли в качестве конечного разделителя (* или EOL).Поменяемые биты сгруппированы по круглым скобкам, затем в строке замены цифры обозначают, где ... так что сначала помещается содержимое второго набора скобок, затем вертикальная черта, затем первый набор скобок, затем третий.

По умолчанию REGEXP_REPLACE заменяет все вхождения, которые он находит в шаблоне, и заменяет его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...