Oracle中的列转行实现字段拼接用例
- Oracle中的列转行实现字段拼接
场景
在SQL使用过程中经常有这种需求:将某列字段拼接成
in('XX','XX','XX','XX','XX','XX' ...)做为查询条件。
实现
select 'in ('''||replace(wm_concat(EMPNO),',',''',''')||''')' from EMP

总结
- 两端字符的拼接
- 这里用
'in ('''和''')'分别实现了in ('和')的前后拼接,以''')'为例,其中第一个第四个'是Oracle中的字符串连接符,第二个'是一个转义字符,第三个'才是我们真正被转义的内容。- lpad()、rpad()在两端字符的填充中较难控制填充字符串长度。
- wm_concat的使用
这里推荐使用LISTAGG()函数,主要因为:
- 在不同的oracle版本中,
WMSYS.WM_CONTACT返回的数据类型不一致,10G版本中,返回的是字符串类型,11G版本中,返回的是clob类型,Oracle 11gR2和12C上已经摒弃了wm_concat函数。- LISTAGG()支持自定义分割字符串,默认值为 NULL,而
WMSYS.WM_CONTACT固定只能用'拼接,除非使用REPLACE()替换为不同拼接符。
select mgr,'in (''' ||REPLACE(LISTAGG(EMPNO, ',') within group(order by mgr), ',', ''','& 大专栏 Oracle中的列转行实现字段拼接用例#39;') || ''')' from EMP group by mgr
扩展
转义符
'(单引号)的转义
Select 'test' || '''' from dual;
Select 'test ''' from dual;
- ASCII码实现转义
Select 'Tom' || chr(38) || 'Jerry' from dual; --chr(38)是‘&'的ASCII码
- ESCAPE转义
使用 ESCAPE关键字定义转义符。 在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。
SELECT * FROM t_test tt WHERE tt.t_ch LIKE '%%'; -- 查找全部
SELECT * FROM t_test tt WHERE tt.t_ch LIKE '%_%'; -- 查找全部
SELECT * FROM t_test tt WHERE tt.t_ch LIKE '%/%'; -- 查找含有左斜杠
SELECT * FROM t_test tt WHERE tt.t_ch LIKE '%/%%' ESCAPE '/'; -- 使用/转义,查找含有%的字符
SELECT * FROM t_test tt WHERE tt.t_ch LIKE '%/_%' ESCAPE '/'; -- 使用/转义,查找含有_的字符
LISTAGG函数
- 语法
LISTAGG(aggregate_expression [, 'delimiter' ] ) [ WITHIN GROUP (ORDER BY order_list) ]
- 参数
aggregate_expression:
提供要聚合的值的任何有效表达式(如列名称)。忽略 NULL 值和空字符串。LISTAGG 不支持 DISTINCT 表达式。delimiter:
可选。将分隔串联的值的字符串常数。默认值为 NULL。WITHIN GROUP (ORDER BY order_list):
可选。指定聚合值的排序顺序。
- 返回值
VARCHAR(MAX)。如果结果集大于最大 VARCHAR 大小(64K – 1 或 65535),则 LISTAGG 返回以下错误:
Invalid operation: Result size exceeds LISTAGG limit
Oracle中的列转行实现字段拼接用例的更多相关文章
- Oracle中的列转行例子详解
数据如下:name id张三 1,2,3 要求实现:name id张三 1张三 2张三 3 --创建临时表 create table tmp as(select '张三' name, '1,2,3' ...
- Oracle中对列加密的方法
Oracle中对列加密的方法 2011-12-22 17:21:13 分类: Linux Oracle支持多种列加密方式: 1,透明数据加密(TDE):create table encrypt_col ...
- Oracle 四种列转行的方法
1. Oracle自带列转行函数listagg: 实例: with temp as( select 'China' nation ,'Guangzhou' city from dual union a ...
- oracle中查看所有表和字段以及表注释字段注释
获取表:select table_name from user_tables; //当前用户拥有的表 select table_name from all_tables; //所有用户的表 selec ...
- kettle中denormalizer(列转行)的使用
转载: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sucre.blog.51cto.com/1084905/1434015 ...
- hive中的列转行和行转列
1.列转行 1.1 相关函数的说明: concat(string1,string,...) //连接括号内字符串,数量不限. concat_ws(separator,string1,string2,. ...
- SQL Server中动态列转行
http://www.cnblogs.com/gaizai/p/3753296.html 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现 ...
- mysql 列转行,合并字段的方法
数据表(表名:xsk) +----+------+-----------+-------+ | id | name| course | score | +----+------+----------- ...
- Oracle中查看所有表和字段以及表注释.字段注释
获取表: select table_name from user_tables; //当前用户拥有的表 select table_name from all_tables; //所有用户的表 sele ...
随机推荐
- 四、NOSQL之Redis持久化缓存服务基础实战第三部
1.NOSQL的理解 NOSQL是不仅仅是SQL,说的就是sql的补充,但是不能替代SQL. nosql库:memcached.memcachedb.redis 2.redis 简介 Redis是一个 ...
- node 配置文件
# cat ~/.npmrc prefix=E:/Private/nodejs #registry=http://r.cnpmjs.org/ registry=http://registry.npm. ...
- [Algo] 649. String Replace (basic)
Given an original string input, and two strings S and T, replace all occurrences of S in input with ...
- Angular ng-container ng-template 用法
ng-container本身不创建任何html代码,相当于一个容器. <ng-container *ngFor="let item of dataSource;let i=index& ...
- vs code打开文件显示的中文乱码
这种情况下,一般是编码格式导致的,操作办法: 鼠标点击之后,上面会弹出这个界面,双击选中 然后从UTF-8换到GB2312,或者自己根据情况,更改编码格式
- soupUI解决md5加密签名,cookie传递
问题详情: 1.接口调用需要前提状态:登录状态(cookie) 2.接口请求需要签名,签名规则为:MD5(TokenKey+apikey+timestamp+nonc) 其中 1.TokenKey.a ...
- java调用IPFS去中心化体系
Maven pom.xml引入 <repositories> <repository> <id>jitpack.io</id> <url>h ...
- J - Association of Cats and Magical Lights Kattis - magicallights (树状数组+dfs序)
Rar the Cat((™)) is the founder of ACM (Association of Cats and Magical Lights). This is the story o ...
- spring boot学习4 多环境配置
说明: 在企业中,一个项目一般都有测试环境(test) .开发环境(dev).生产环境(pro)等等.在每个环境中,配置信息会不一样的.比如数据库.静态资源文件位置等都会不一样的. 那么使用sprin ...
- SCI|EI|ISTP|万方|istic|NSTL|CASTD|CNKI|nlc|ethesys|CALIS|CETD|proquest|NDLTD|中国科学院学位论文检索系统|学位论文
BD AC D 三大检索指的是:SCI(科学引文索引 ).EI(工程索引 ).ISTP(科技会议录索引 ) 即Science Citation Index.Engineering Index.Conf ...