oracle wmsys.wm_concat函数

 

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--

 

转载于:https://my.oschina.net/kt431128/blog/298147

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值