您的位置:首页 > 数据库 > Oracle

oracle wmsys.wm_concat函数

2011-03-29 21:47 239 查看
 

wmsys.wm_concat函数,oracle 10g引入的;

作用:连接字符串,也可以用于将多行数据,转换为一行。

 

1.用于行列转换

SQL> select * from a;
ITEMID                    TYPEID TYPENAME
----------- ------------------------- ----------
1                         2 bbb
2                         3 ccc
2                         5 ddd
3                         5 ddd
1                         1 aaa
SQL> select * from b;
ITEMID ITEMNAME
-------------------- ---------
1 kkk
2 lll
3 ooo
SQL> select a.itemid,b.itemname,wmsys.wm_concat(a.typename)
2  from a,b
3  where a.itemid=b.itemid
4  group by a.itemid,b.itemname;
ITEMID ITEMNAME   WMSYS.WM_CONCAT(A.TYPENAME)
------------------ ---------- -------------------------------
1 kkk        bbb,aaa
2 lll        ccc,ddd
3 ooo        ddd
 

2.下面将emp表中所有员工姓名连接起来:

SQL> select wmsys.wm_concat(ename) from emp;
WMSYS.WM_CONCAT(ENAME)
--------------------------------------------------------------------------------
SMITH,ALLEN,WARD,JONES,MARTIN,BLAKE,CLARK,SCOTT,KING,TURNER,ADAMS,JAMES,FORD,MIL
 

那如果我们要将上面一行中员工的姓名区分开来,每个名字显示在一行怎么实现呢?

这要用到正则表达式函数regexp_substr();

SQL> select regexp_substr('SMITH,ALLEN,WARD,JONES,MARTIN,BLAKE,CLARK,SCOTT,KING,TURNER,ADAMS,JAMES,FORD,MIL','[^,]+',1,level)
2         as cl1
3  from dual
4  connect by
5          level<=length('SMITH,ALLEN,WARD,JONES,MARTIN,BLAKE,CLARK,SCOTT,KING,TURNER,ADAMS,JAMES,FORD,MIL')-
6          length(replace('SMITH,ALLEN,WARD,JONES,MARTIN,BLAKE,CLARK,SCOTT,KING,TURNER,ADAMS,JAMES,FORD,MIL',',',''))+1;
CL1
--------------------------------------------------------------------------------
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MIL
 

--the end--

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 正则表达式 sql