文章目录

  • Oracle中的列转行实现字段拼接

场景

在SQL使用过程中经常有这种需求:将某列字段拼接成in('XX','XX','XX','XX','XX','XX' ...)做为查询条件。

实现

select 'in ('''||replace(wm_concat(EMPNO),',',''',''')||''')' from EMP

总结

  1. 两端字符的拼接
  1. 这里用'in ('''''')'分别实现了in ('')的前后拼接,以''')'为例,其中第一个第四个'是Oracle中的字符串连接符,第二个'是一个转义字符,第三个'才是我们真正被转义的内容。
  2. lpad()、rpad()在两端字符的填充中较难控制填充字符串长度。
  1. wm_concat的使用

这里推荐使用LISTAGG()函数,主要因为:

  1. 在不同的oracle版本中,WMSYS.WM_CONTACT返回的数据类型不一致,10G版本中,返回的是字符串类型,11G版本中,返回的是clob类型,Oracle 11gR2和12C上已经摒弃了wm_concat函数。
  2. 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) ]
  • 参数
  1. aggregate_expression:
    提供要聚合的值的任何有效表达式(如列名称)。忽略 NULL 值和空字符串。LISTAGG 不支持 DISTINCT 表达式。
  2. delimiter:
    可选。将分隔串联的值的字符串常数。默认值为 NULL。
  3. WITHIN GROUP (ORDER BY order_list):
    可选。指定聚合值的排序顺序。
  • 返回值

VARCHAR(MAX)。如果结果集大于最大 VARCHAR 大小(64K – 1 或 65535),则 LISTAGG 返回以下错误:

  Invalid operation: Result size exceeds LISTAGG limit

Oracle中的列转行实现字段拼接用例的更多相关文章

  1. Oracle中的列转行例子详解

    数据如下:name id张三 1,2,3 要求实现:name id张三 1张三 2张三 3 --创建临时表 create table tmp as(select '张三' name, '1,2,3' ...

  2. Oracle中对列加密的方法

    Oracle中对列加密的方法 2011-12-22 17:21:13 分类: Linux Oracle支持多种列加密方式: 1,透明数据加密(TDE):create table encrypt_col ...

  3. Oracle 四种列转行的方法

    1. Oracle自带列转行函数listagg: 实例: with temp as( select 'China' nation ,'Guangzhou' city from dual union a ...

  4. oracle中查看所有表和字段以及表注释字段注释

    获取表:select table_name from user_tables; //当前用户拥有的表 select table_name from all_tables; //所有用户的表 selec ...

  5. kettle中denormalizer(列转行)的使用

    转载: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sucre.blog.51cto.com/1084905/1434015 ...

  6. hive中的列转行和行转列

    1.列转行 1.1 相关函数的说明: concat(string1,string,...) //连接括号内字符串,数量不限. concat_ws(separator,string1,string2,. ...

  7. SQL Server中动态列转行

    http://www.cnblogs.com/gaizai/p/3753296.html 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现 ...

  8. mysql 列转行,合并字段的方法

    数据表(表名:xsk) +----+------+-----------+-------+ | id | name| course | score | +----+------+----------- ...

  9. Oracle中查看所有表和字段以及表注释.字段注释

    获取表: select table_name from user_tables; //当前用户拥有的表 select table_name from all_tables; //所有用户的表 sele ...

随机推荐

  1. IIS设置禁止某个IP或IP段访问网站的方法

    网站被刷,对话接不过来 打开IIS,选中禁IP的站点,找到“ip地址和域限制”这个功能,如果没有安装,打开服务器管理器,点击角色,窗口右边找到添加角色服务,找到“IP和域限制”并勾选安装. 打开ip地 ...

  2. 文件操作符|-e|-M|-s|-A|_|-r -w $filename|stat|localtime|&|>>|<<

    TTY:终端是一种字符型设备,它有多种类型,通常使用tty 来简称各种类型的终端设备 #!/usr/bin/perl use strict; use warnings; print "exi ...

  3. vue项目post、put、delete、get向java后端传数组

    通常我们向后端发送数据有两种方式 get.post,后又restful风格出现,又有put.delete等传参方式.但是对于我们来说他们的传参本质还是只有get和post的两种,即 get.delet ...

  4. 吴裕雄--天生自然C语言开发:作用域规则

    #include <stdio.h> int main () { /* 局部变量声明 */ int a, b; int c; /* 实际初始化 */ a = ; b = ; c = a + ...

  5. 创想变现:斯坦福设计创新课堂ME310分享(上篇)

    编者按:今年6月,微软亚洲研究院人机交互组研究员顾嘉唯,在美国斯坦福大学担任了d-School的ME310设计课程的项目评审.该课程是斯坦福大学的全球联合新产品设计创新课程,学习方式以小组为单位,每个 ...

  6. git相关学习地址

    https://git-scm.com/book/zh/v2    这篇文章写得不错,值得一读

  7. 奇点云数据中台技术汇(一) | DataSimba——企业级一站式大数据智能服务平台

    在这个“数据即资产”的时代,大数据技术和体量都有了前所未有的进步,若企业能有效使用数据,让数据赚钱,这必将成为企业数字化转型升级的有力武器. 奇点云自研的一站式大数据智能服务平台——DataSimba ...

  8. Linux系统使用IBMV3700存储(可用)

    第一步:在存储上添加主机,主机采用ISCSI连接,此时需要主机的iqn 主机上获取IQN的命令如下: cat /etc/iscsi/initiatorname.iscsi 此时添加的主机状态处于脱机的 ...

  9. Pulsar、ZooKeeper、BookKeeper 作用简述

    Pulsar:采取了存储计算分离的技术ZooKeeper 集群的作用和在 Kafka 中是一样的,都是被用来存储元数据.BookKeeper 集群则被用来存储消息数据.BookKeeper 有点儿类似 ...

  10. asp.net---jquery--ajax 实现滚动条滚动到底部分页显示

    前台:aspx页面 var bgtime = $(" #date1 ").val(); var overtime = $(" #date2 ").val(); ...