Oracle各种连接函数总结
1.前言
Oracle可用连接函数会介绍以下几个
- Oracle列转行函数 Listagg()
- strcat()
- wmsys.wm_concat()
2.Oracle列转行函数 Listagg()
2.1最基础的用法:
LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX)
用法就像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来。
其中LISTAGG函数第一个参数为要拼接的字段,第二个参数为用什么字符串进行连接
eg : listagg(city,’,’)
后面GROUP()中为对连接之后的行数据按什么字段进行排序
eg : order by city
- with temp as(
- 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) as Cities
- from temp
- group by nation
运行结果:
2.2同样是聚合函数,还有一个高级用法:
就是over(partition by XXX)
也就是说,在你不实用Group by语句时候,也可以使用LISTAGG函数:
- with temp as(
- select 500 population, 'China' nation ,'Guangzhou' city from dual union all
- select 1500 population, 'China' nation ,'Shanghai' city from dual union all
- select 500 population, 'China' nation ,'Beijing' city from dual union all
- select 1000 population, 'USA' nation ,'New York' city from dual union all
- select 500 population, 'USA' nation ,'Bostom' city from dual union all
- select 500 population, 'Japan' nation ,'Tokyo' city from dual
- )
- select population,
- nation,
- city,
- listagg(city,',') within GROUP (order by city) over (partition by nation) rank
- from temp
运行结果:
2.3总结
listagg()函数支持最低版本需要Oracle 11gR2,查询自己Oracle版本sql如下,
SELECT v.VERSION FROM v$instance v;
如果版本低于11g,查询会报错 [未找到要求的 FROM 关键字]
3.strcat()
- with temp as(
- 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,strcat(city) from temp
- group by nation
结果为:
注意:如果执行报错,报错内容为 strcat标识符无效,则你的版本缺少这个函数,手动执行下面的strcat源码即可
ORACLE 字符串聚合函数 strCat
- create or replace type strcat_type as object
- (
- currentstr varchar2(4000),
- currentseprator varchar2(8),
- static function ODCIAggregateInitialize(sctx IN OUT strcat_type) return number,
- member function ODCIAggregateIterate(self IN OUT strcat_type,value IN VARCHAR2) return number,
- member function ODCIAggregateTerminate(self IN strcat_type,returnValue OUT VARCHAR2, flags IN number) return number,
- member function ODCIAggregateMerge(self IN OUT strcat_type,ctx2 IN strcat_type) return number
- );
- create or replace type body strcat_type is
- static function ODCIAggregateInitialize(sctx IN OUT strcat_type) return number is
- begin
- sctx := strcat_type('',',');
- return ODCIConst.Success;
- end;
- member function ODCIAggregateIterate(self IN OUT strcat_type, value IN VARCHAR2) return number is
- begin
- if self.currentstr is null then
- self.currentstr := value;
- else
- self.currentstr := self.currentstr ||currentseprator || value;
- end if;
- return ODCIConst.Success;
- end;
- member function ODCIAggregateTerminate(self IN strcat_type, returnValue OUT VARCHAR2, flags IN number) return number is
- begin
- returnValue := self.currentstr;
- return ODCIConst.Success;
- end;
- member function ODCIAggregateMerge(self IN OUT strcat_type, ctx2 IN strcat_type) return number is
- begin
- if ctx2.currentstr is null then
- self.currentstr := self.currentstr;
- elsif self.currentstr is null then
- self.currentstr := ctx2.currentstr;
- else
- self.currentstr := self.currentstr || currentseprator || ctx2.currentstr;
- end if;
- return ODCIConst.Success;
- end;
- end;
- CREATE OR REPLACE FUNCTION strcat (input VARCHAR2) RETURN VARCHAR2 PARALLEL_ENABLE AGGREGATE USING strcat_type;
4.wmsys.wm_concat()
注意:11gr2和12C上已经摒弃了wm_concat函数,所以要用连接函数,建议使用之前介绍的两种.如果之前老项目使用了这个函数,需要重建该函数或者在当前运行oracle版本中没有这个函数请看这 “WM_CONCAT”: 标识符无效
- with temp as(
- select 1 grp, 'a1' str from dual
- union
- select 1 grp, 'a2' str from dual
- union
- select 2 grp, 'b1' str from dual
- union
- select 2 grp, 'b2' str from dual
- union
- select 2 grp, 'b3' str from dual
- )
- select grp, wmsys.wm_concat(str)
- from temp
- group by grp
Oracle各种连接函数总结的更多相关文章
- Oracle 中 decode 函数用法
Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译 ...
- oracle 自定义 聚合函数
Oracle自定义聚合函数实现字符串连接的聚合 create or replace type string_sum_obj as object ( --聚合函数的实质就是一个对象 sum ...
- [转]ORACLE日期时间函数大全
本文转自:http://www.cnblogs.com/chuncn/archive/2009/04/29/1381282.html ORACLE日期时间函数大全 TO_DATE格式(以时间: ::2 ...
- ORACLE SQL单行函数(三)【weber出品必属精品】
16.L:代表本地货币符,这个和区域有关.这个时候我们想来显示一下人民币的符号:¥ $ vi .bash_profile ---写入如下内容: export NLS_LANG='SIMPLIFIED ...
- Oracle/Mysql/SqlServer函数区别
mysql日期和时间格式转换 Linux scp 使用详解 Oracle/Mysql/SqlServer函数区别 2011-07-01 12:34:36| 分类: Mysql技术 | 标签:mys ...
- Oracle经常使用函数
Oracle经常使用函数 --TRUNC,TO_DATE,TO_CHAR,TO_NUMBER, SUBSTR,REPLACE.NVL .TRIM,wm_concat,upper, lower,leng ...
- Oracle内置函数
单行函数:当查询表或试图时每行都能返回一个结果,可用于select,where,order by等子句中. 对于没有目标的select查询用dual表,这个表时真实存在的,每个用户都可以读取. 单行函 ...
- Oracle时间日期函数
ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02 13:45:25为例) Year: yy two digits 两位年 ...
- [转载]ORACLE日期时间函数大全
ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02 13:45:25为例) Year: yy two digits 两位年 ...
随机推荐
- linux命令之------Mv命令
Mv命令 1)作用:用来为文件或目录改名/或将文件或目录一如其他位置 2)-i:若指定目录已有同名文件,则先询问是否覆盖旧文件: 3)-f:在mv操作要覆盖某已有的目标文件时,不给任何指示: 4)案例 ...
- 「NOIP2016」换教室
传送门 Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 $ 2n $ 节课程安排在 $ n $ 个时间段上.在第 $ i ...
- HTTPS加密协议过程
1.客户端发起https请求 指用户在浏览器中输入一个https网址,然后链接到server的443端口 2.服务端的配置 在服务端向CA机构申请SSL数字证书.SSL证书就是一对公钥和私钥.公钥相当 ...
- eclipse Target runtime com.genuitec.runtime.generic.jee50 is not defined
1.情景展示 报错信息如下: 2.原因分析 使用eclipse导入myeclipse时,唯独这个报错信息改不了. 需要通过修改这个项目的配置文件才行. 3.解决方案 第一步:切换到导航视图: 第二 ...
- 代码审计和动态测试——BUUCTF - 高明的黑客
根据题目提示,访问http://2ea746a2-0ecd-449b-896b-e0fb38956134.node1.buuoj.cn/www.tar.gz下载源码 解压之后发现有3002个php文件 ...
- 分析 Kaggle TOP0.1% 如何处理文本数据
感觉大佬的代码写的就是好,在处理数据的方面,首先定义一个 提取特征的类, class Extractor(object):,然后每一种方法对这个类进行重构,这个类主要结构就是: class Extra ...
- Django实现自动发布(3发布-安装)
相对于服务的升级.回退,新部署一个服务要复杂一些,要满足以下要求: 已经运行了服务实例的主机不能重复部署 进程启动需要的配置文件要先同步到主机上 之前的升级.回退都是指进程的操作,不涉及配置文件的变更 ...
- encode_chunked=req.has_header('Transfer-encoding'))问题解决方法
Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.6/lib/ ...
- 手动计算UTXO
const TX_TYPE_IN = 1; const TX_TYPE_OUT = 2; export const CreateUtxos = async (address: string, data ...
- sql server 利用存储过程http请求调用URL链接访问方法
sp_configure ; GO RECONFIGURE; GO sp_configure ; GO RECONFIGURE; GO EXEC sp_configure 'Ole Automatio ...