разобрать и заменить в оракуле - PullRequest
0 голосов
/ 02 декабря 2010

Я новичок в SQL / Oracle, и мне интересно, есть ли простой способ разобрать строку csv и заменить токены другой строкой.

например, у меня есть строка, подобная

param, value1, str1, param, value2, str3, param, value3

, и я хочу заменить значение послеparam с CONSTANT

, поэтому строка станет

param, CONSTANT, str1, param, CONSTANT, str3, param, CONSTANT

заранее.

Ответы [ 2 ]

1 голос
/ 02 декабря 2010

Вы можете попробовать REGEXP_REPLACE

select regexp_replace(regexp_replace(regexp_replace(
           str,'[^,]*','CONSTANT',1,3),'[^,]*','CONSTANT',1,9),'[^,]*','CONSTANT',1,15)
from
   (select 'param,value1,str1,param,value2,str3,param,value3' str from dual);

Если у вас есть что-то грязное (например, в кавычках, включая запятые), то оно сломается.Тем не менее, регулярные выражения не являются моей сильной стороной, и некоторые из них должны быть в состоянии сделать лучше.

Я предполагаю, что вы знаете, что наличие СУБД, подобной Oracle, и хранение данных таким странным образом довольно плохоидея.Если вы не собираетесь использовать структуру конвективных таблиц / столбцов, вы можете использовать функции отношения объектов или XML.

0 голосов
/ 02 декабря 2010

Для этого я создаю пакет с регулярными выражениями с осмотром - см. http://github.com/xtender/XT_REGEXP Пример:

with t as 
     (select 'param,value1,str1,param,value2,str3,param,value3' str from dual)
select xt_regexp.replace_all(str,'(?<=param,)[^,]*','CONSTANT') from t

(? <= Param,) - это упреждающее регулярное выражение</p>

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