我在表THE_VALUE
中有一个名为TABLE_A
的列,它包含类似于以下内容的数据,即一些示例行可能是:
tom:harry, sally, jeff
state(vic,nsw), england, qwerty(aaa,bbb, cccc):qaz
我需要做的是使用Oracle 10g sql更新此列并替换所有逗号,但括号内的逗号除了冒号,所以基本上,最终结果将是:
tom:harry:sally:jeff
state(vic,nsw):england:qwerty(aaa,bbb, cccc):qaz
我还想确保更新后冒号后面没有空格。
我已尝试使用replace
函数,但我不确定如何不在括号中包含逗号,因为我不希望这些更改为冒号。
感谢。
答案 0 :(得分:5)
使用REPLACE功能无法做到你想要的。但是,您可以尝试REGEXP_REPLACE函数。
http://www.regular-expressions.info/oracle.html
正如程序员的笑话所说 - 现在你有两个问题:)
答案 1 :(得分:3)
这是我在快速做的PL / SQL函数:
create or replace function fix_comma(str varchar2) return varchar2
is
strLen smallint := length(str);
cntPar smallint := 0;
c char;
strOut varchar2(4000) := '';
lastWasComma boolean := false;
begin
for i in 1..strLen loop
c := substr(str, i, 1);
if c = '(' then
cntPar := cntPar + 1;
lastWasComma := false;
elsif c = ')' then
if cntPar > 0 then
cntPar := cntPar - 1;
end if;
lastWasComma := false;
elsif cntPar = 0 and c = ',' then
c := ':';
lastWasComma := true;
elsif cntPar = 0 and c = ' ' and lastWasComma then
c := null;
else
lastWasComma := false;
end if;
strOut := strOut || c;
end loop;
return strOut;
end;
select fix_comma('state(vic,nsw), england, qwerty(aaa,bbb, cccc):qaz') from dual
union
select fix_comma('state(tik (vic,nsw) tok))), england, qwerty(aaa, bbb, cccc):qaz') from dual;
输出:
state(vic,nsw):england:qwerty(aaa,bbb, cccc):qaz
state(tik (vic,nsw) tok))):england:qwerty(aaa, bbb, cccc):qaz
尝试使用Oracle RegEx编写类似的东西。我知道我放弃了。
答案 2 :(得分:0)