oracle 数据库code 拼接字段如何转换成文字
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 数据库code 拼接字段如何转换成文字相关的知识,希望对你有一定的参考价值。
参考技术A 有多种解决办法。一、使用“||”连接。二、使用CONCAT()函数连接。
在使用这个函数时,当拼接的值不是字符串时,oracle会自动转换成字符串。需要注意的时,此函数里面只支持两个参数,不支持超过两个的参数,否则会报:参数个数无效。当需要多个参数进行拼接时,可以使用多个concat()函数进行嵌套。
注意:mysql中不能使用||来连接字符串,只能用concat来连接。
oracle把查询出的字段拼接在一起
比如列colA colB...
1 2
1 2
1 2
然后查出来的是这样
colA colB ...
1,1,1 2,2,2
其实最好是这样,就一个字段
colA
(1,2)(1,2)(1,2)
oracle 提供了两个函数WMSYS.WM_CONCAT 和 ListAgg函数。
先介绍:WMSYS.WM_CONCAT
例:
id name
1 aa
2 bb
3 cc
要的结果是"aa,bb,cc"
select WMSYS.WM_CONCAT(a.name) from user a
这样的话,查询出的结果:"aa,bb,cc"
分隔符如果不需要用英文的逗号,需要改成别的符号比如分号的,可以用下面的方法替换下:
select replace(WMSYS.WM_CONCAT(a.name),',',';') from user a
结果:"aa;bb;cc"
======================================================================
ListAgg函数
listagg函数的语法结构如下:
LISTAGG( [,]) WITHIN GROUP (ORDER BY ) [OVER (PARTITION BY )]
listagg虽然是聚合函数,但可以提供分析功能(比如可选的OVER()子句)。使用listagg中,下列中的元素是必须的: www.2cto.com
•需要聚合的列或者表达式
•WITH GROUP 关键词
•分组中的ORDER BY子句
例子:
DEPTNO ENAME
--------- ----------
10 CLARK
10 KING
10 MILLER
20 ADAMS
20 FORD
20 JONES
按照DEPTNO字段分组,对结果集进行字符串聚合,结果如下:
DEPTNO AGGREGATED_ENAMES
--------- -------------------------
10 CLARK,KING,MILLER
20 ADAMS,FORD,JONES
SQL:
SELECT deptno,LISTAGG(ename, ',') WITHIN GROUP (ORDER BY ename) AS employees FROM emp GROUP BY deptno;追问
那如果我要这种形式的数据呢》》???(1,2)(1,2)(1,2)
最后就一个字段,一行数据,,
写个方法也行
答对有加分,o(∩_∩)o
或者你告诉我怎么解决缓冲区太小的问题
select 'China' nation ,'Guangzhou' city from dual union all
select 'China' nation ,'Shanghai' city from dual union all
select 'China' nation ,'Beijing' city from dual union all
select 'USA' nation ,'New York' city from dual union all
select 'USA' nation ,'Bostom' city from dual union all
select 'Japan' nation ,'Tokyo' city from dual
)
select nation,listagg(city,',') within GROUP (order by city)
from temp
group by nation
这是最基础的用法:
LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX)
用法就像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来。
以上是关于oracle 数据库code 拼接字段如何转换成文字的主要内容,如果未能解决你的问题,请参考以下文章
oracle 结果集行转列,多行数据转为一行显示,第一列内容拼接生成字段名