一、wm_concat 多行字串拼接
有如下員工部門表emp_dept,資料如下:
;需要實現如下結果
就需要用到wm_concat 函式:
sql如下:
select dept_name 部門, wm_concat(t.emp_name) 員工 from emp_dept t group by dept_name12
但是這樣的查詢結果卻是:
這裡還需要to_char一下
select dept_name 部門, to_char(wm_concat(t.emp_name))員工 from emp_dept t group by dept_name12
如果需要將拼接的字串改為 『;』
select dept_name 部門, replace(to_char(wm_concat(t.emp_name)),',',';')員工 from emp_dept t group by dept_name12
執行結果:
二、字串拆分為多行
有字串 『a,b,c,d,e』需要拆分為:
sql如下:
select regexp_substr('a,b,c,d,e', '[^,]+', 1, rownum) 字串拆分
from dual
connect by rownum <= length(regexp_replace('a,b,c,d,e', '[^,]', null)) + 1;12
3同樣我們可以將銷售部的張三,王五,李**行拆分
with tmp as
(select to_char(wm_concat(t.emp_name)) emp_name
from emp_dept t
where t.dept_name = '銷售部'
group by dept_name)
select regexp_substr(tmp.emp_name, '[^,]+', 1, rownum) 員工
from tmp
connect by rownum <= length(regexp_replace(tmp.emp_name, '[^,]', null)) + 1;
執行結果如下:12
3456
789到這裡,可能有人會像可不可以將一中wm_concat 多行拼接字串的結果全部拆分,答案是肯定,但是用sql語句是無法實現的,需要使用儲存過程,將多行拼接的字串迴圈傳入到上面sql中進行拆分。有興趣的童鞋可以嘗試下,採用游標是最好的選擇。
附上儲存過程**
create or replace procedure tmp_split is
--宣告多行拼接字串查詢游標
cursor cur_string_concat is
select to_char(wm_concat(t.emp_name)) emp_name
from emp_dept t
group by dept_name;
--宣告變數rec_emp_name表示為游標cur_string_concat一行記錄
rec_emp_name cur_string_concat%rowtype;
--宣告拆分字串游標,傳入引數cur_string為需要拆分的字串
cursor cur_string_split(cur_string varchar2) is
select regexp_substr(cur_string, '[^,]+', 1, rownum) e_name
from dual
connect by rownum <=
length(regexp_replace(cur_string, '[^,]', null)) + 1;
--宣告變數rec_string游標cur_string_split的一行記錄
rec_string cur_string_split%rowtype;
begin
--先開啟字串拼接游標
open cur_string_concat;
--開始迴圈
loop
--將cur_string_concat每次迴圈的結果賦值給變數rec_emp_name
fetch cur_string_concat
into rec_emp_name;
--當cur_string_concat迭代完了退出
exit when cur_string_concat%notfound;
open cur_string_split(rec_emp_name.emp_name);
loop
fetch cur_string_split
into rec_string;
exit when cur_string_split%notfound;
--將拆分的結果儲存到表中
insert into tmp_split_emp
select rec_string.e_name from dual t;
end loop;
--一定要關閉游標
close cur_string_split;
end loop;
commit;
close cur_string_concat;
end tmp_split;12
3456
78910
1112
1314
1516
1718
1920
2122
2324
2526
2728
2930
3132
3334
3536
3738
3940
4142
43執行儲存過程:
begin
tmp_split;
end ;12
3查詢結果為:
拼接字串
border 1 class box 標籤名稱th 是否顯示th 標籤順序th tr thead 首頁td class check 是option 否option select td class number 1option 2option 3option 4option 5option 6opti...
字串拼接
給定兩個字串s1和s2,合併成乙個新的字串s。合併規則為,s1的第乙個字元為s的第乙個字元,將s2的最後乙個字元作為s的第二個字元 將s1的第二個字元作為s的第三個字元,將s2的倒數第二個字元作為s的第四個字元,以此類推。包含多組測試資料,每組測試資料報含兩行,代表長度相等的兩個字串s1和s2 僅由...
字串拼接
本文總結記錄linux c中有關字串的拼接方法,strncat 和 snprintf 函式 一 strncat 實現字串拼接 char strncat char dest,const char src,size t n 宣告,n 為 src 字串長度 char strncat char dest,c...