我有一个列“ col1”,例如:'a,b,x,y,z'(有序字符串)
另一列“ col2”类似于:'a,x'或'b,y,z'(有序字符串)
“ col2”中的所有字符串值均由子查询生成。因此它不是恒定的。
但是,“ col1”中的值是恒定的。那就是col1 ='a,b,x,y,z'
create table test (col1 varchar2(20), col2 varchar2(10));
insert into test values ('a,b,x,y,z','a,x');
insert into test values ('a,b,x,y,z','b,y,z');
需要有关替换一个sql的帮助。
需要帮助将“ col1”上的元素替换为“ col2”。
例如
when col2='a,x', the result should be : 'b,y,z'
when col2='b,y,z', the result should be : 'a,x'
答案 0 :(得分:2)
这是一种有趣的方法:
select col1, col2,
ltrim(regexp_replace(translate(replace(col1,','),','||replace(col2,','),',')
,'(.)',',\1'),',') as col3
from test;
也就是说:(从内而外读取执行时的函数调用)
答案 1 :(得分:0)
这是一个选择;我加入了ID列以使其更简单。我希望您的 real 案例中存在与之相似的列。
想法是:
i <C-Q> * <Esc>:q!<CR><Tab><Tab>" quit without saving with C-q
i <C-S> * <Esc>:wq!<CR><Tab><Tab>" save and exit files with C-s
i <C-Y> * <Esc>:set list!<CR>:set number!<CR>i
i <MiddleMouse> * :set paste<CR><S-Ins>:set nopaste<CR>
,col1
)拆分为行
col2
代表one
的行col1
代表two
的行col2
集运算符减去这两组行MINUS
,汇总结果LISTAGG