多列转字符串
这个比较简单,用||或concat函数可以实现
select concat(id,username) str from app_user
select id||username str from app_user

字符串转多列
实际上就是拆分字符串的问题,可以使用 substr、instr、regexp_substr函数方式
字符串转多行
使用union all函数等方式
CREATE OR REPLACE TYPE strsplit_type IS TABLE OF VARCHAR2 (4000);
create or replace function strsplit(p_value varchar2,
p_split varchar2 := ',')
--usage: select * from table(strsplit('1,2,3,4,5'))
return strsplit_type
pipelined is
v_idx integer;
v_str varchar2(500);
v_strs_last varchar2(4000) := p_value;
begin
loop
v_idx := instr(v_strs_last, p_split);
exit when v_idx IS NULL OR v_idx <= 0;
v_str := substr(v_strs_last, 1, v_idx - 1);
v_strs_last := substr(v_strs_last, v_idx + 1);
pipe row(v_str);
end loop;
pipe row(v_strs_last);
return;
end strsplit;
应用
SELECT *FROM table(strsplit('a,b,c'));
SELECT * FROM table(strsplit('a,b,c')) a WHERE a.column_value IN ( SELECT a.column_value from table(strsplit('b,c')) a);
多行合并单行字符串
wm_concat函数
扩张应用方法
--- 实例 业务表a 附件表b
--- a表字符串形式存有多个附件id
--- a 表以字符串分割的形式存储b表的主键
--- 以字符串的形式返回b表的信息
select a.*, (SELECT WM_CONCAT(FILE_PATH)
FROM 【table_b】
WHERE ATTA_ID IN (SELECT * FROM TABLE(STRSPLIT(A.PIC_AIDS, ',')))) PIC_PATHS
from 【table】 A
本文介绍如何在SQL中进行多列转字符串、字符串转多列及多行的操作,利用concat、union all、substr、instr等函数,并提供字符串转多行的具体函数实现及应用案例。


1万+

被折叠的 条评论
为什么被折叠?



