知识点备忘-oracle的wm_concat()函数

今天在工作中遇到一个需求,需要把SQL语句的查询结果的列转成一行,请教同事后得知可以使用wm_concat()这个函数,现记录在此。

wm_concat()用于将列转为行,列数据之间用逗号隔开,注意其得到的结果类型为CLOB,可以通过to_char()函数转换成varchar2。由于在公司外网没办法连数据库,所以下面的例子纯手打,并非是数据库显示的结果。

假设有oracle中有如下表t_example_employee,内容如下

select * from t_example_employee;

---------------------------------------------------

id     name     age

1       lili           27

2      lucy         26

3       tom        27

4       jim         26

----------------------------------------------------


 

需要得到年龄为27的员工所有员工,并做为一行返回,可以使用

select to_char(wm_concat(name)) names from t_example_employee where age=27;

---------------------------------------------------

 NAMES

lili,tom

---------------------------------------------------


 

而如果我们不想使用默认的“,”分隔,可以通过replace()函数来实现,比如需要将上面的名字用“;”分隔

select replace(to_char(wm_concat(name)),',',';') names from t_example_employee where age=27;

---------------------------------------------------

  NAMES

lili;tom

---------------------------------------------------


 

看到这里,我想到了以前有人问过的一个需求:一个表有50个字段,而我只需要查询49个字段,如果来得到select的内容,难到要一个一个去写字段?其实我们就可以使用wm_concat()来实现,如下所示

select 'select ' || wm_concat(column_names) || ' from t_example_employee' sqlexpr from user_col_comments;

--------------------------------------------------------------------------------------

  SQLEXPR

select ID,NAME,AGE from t_example_employee

--------------------------------------------------------------------------------------


有了上面的结果,你想删哪个字段就删哪个,是不是方便很多啊。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值