首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Oracle 19c 新特性:ANY_VALUE 函数和 LISTAGG 增强

注:Oracle LiveSQL 站点已经升级到 19c 版本,可以通过该网站来测试 19c 新特性。...在Oracle 19c中,一个新函数 ANY_VALUE 被引入进来,这个函数作用是基于ORDER BY定义返回每个组中任何值,通过这一个函数,可以消除将每个列都指定为GROUP BY子句一部分必要性...ANY_VALUE 也可以作为类似 MAX/MIN 窗口函数发挥作用。...ListaggOracle 11.2 中新增函数,对于指定度量,LISTAGG对ORDER BY子句中指定每个组内数据进行排序,然后连接度量列值。...作为分析函数,LISTAGG根据query_partition_clause中一个或多个表达式将查询结果集划分为组。 由于具有灵活数据操作性,LISTAGG函数是行列转换首选。

1.9K40

Oracle字符串特殊处理

1问题背景 今天在做报表查询时遇到一个SQL问题: 某需求表环节处理人字段存储是用户工号,由于有多人情况,所以该表在数据存储时是以英文逗号分开存储。...需求表字段存储结构如下: 需求目标: 解决方案 1) 创建一个Oracle Table 类型 --创建一个表类型 create or replace type table_type as table...not null and instr(e.emi_current_handler, ',') > 0; (问题完美解决) 解释说明 自定义split函数: 该函数有两个参数,第一个参数为要处理字符串...灵活支持业务表多种形式分割,列:“,”、“|”、“&”、“_”... listagg函数: Oracle19C版本后因wm_concat函数效率过低已废弃,可以通过listagg函数来实现行转列需求...转换 3) listagg可以自定义排序方式、以及拼接方式 4) listagg性能优于wm_concat 5) 两者都有长度限制

1.3K30
您找到你想要的搜索结果了吗?
是的
没有找到

巧用SQL:oracle plsql split函数

李伟 专注于oracle pl/sql开发和Java开发,擅长复杂业务逻辑、算法pl/sql实现。 背景 在软件开发过程中程序员经常会遇到字符拼接和拆分工作。...一是字符串拼接,oracle(11.2)提供了listagg函数已经实现了该功能,我们直接使用就可以。...二是字符串拆分,oracle没有实现该功能,但是java提供了split函数实现了字符串拆分功能。 我们可以参考javasplit函数写一个oracle版split函数。...split函数功能是将字符串按照特定字符分隔为多个小字符串,返回结果以List或数组类型保存。...与listagg函数联合查询: ? 注意:listaggoracle 11.2版本新功能。 至此,便简单实现了oracle字符拆分与拼接。

2.1K60

Oracle listagg去重distinct三种方法总结

一、简介 最近在工作中,在写oracle统计查询时候,遇到listagg聚合函数分组聚合之后出现很多重复数据问题,于是研究了一下listagg去重几种方法,以下通过实例讲解三种实现listagg去重方法...oracle官方不太推荐使用wm_concat()来进行聚合,能尽量使用listagg就使用listagg。...【b】第二种方法:使用正则替换方式去重(仅适用于oracle字符串大小比较小情况) --第二种方法:使用正则替换方式去重(仅适用于oracle字符串大小比较小情况) select t.department_name...去重问题如果拼接字符串太长会报oracle超过最大长度错误,只适用于数据量比较小场景。...三、总结 以上就是关于listagg聚合函数去重三种处理方法总结,本文仅仅是笔者一些总结和见解,仅供大家学习参考,希望能对大家有所帮助。

3.7K20

字符转换SQL需求

我们以Oracle 11g为测试库,有几种想法, 想法1.如果记录有限,一种简单方法,可以采用穷举,利用substr函数,拼接出检索结果,功能上可以实现,但是扩展性,可能会差一些。...参考《字段拆分多行需求》,利用正则函数regexp_substr(a, '[^,]+',1,level),拆出","分隔字符串,通过connect by level,实现行转列,此时中间结果行数等于原始字符串...参考《11g中利用listagg函数实现自动拼接INSERT语句》,通过listagg函数,将每行dddddd.xx,用";"拼接,得到需要结果,如下所示, SQL> SELECT listagg...listagg、substr、regexp_substr、connect by level、length、decode等,但是有些函数,可能是Oracle特有的,如果使用MySQL实现相同需求,listagg...函数可以用group_concat替代,regexp_substr在MySQL 5.x中是不支持,而且connect by level是没有直接能用,据说需要自定义函数来实现,所以在Oracle中能跑

1K20

Oracle连接字符串函数listagg()和wmsys.wm_concat()用法简介

一、LISTAGG() 简介 介绍:其函数在Oracle 11g 版本中推出,对分组后数据按照一定排序进行字符串连接。...其中,“[,]”表示字符串连接分隔符,如果选择使用[over (partition by )]则会使其变成分析函数; 用法1: SELECT aaa, listagg(bbb,',') within...aaa) over(partition by aaa) FROM table 二、wm_concat()简介 介绍:其函数在Oracle 10g推出,在10g版本中,返回字符串类型,在11g版本中返回...括号里面的参数是列,而且可以是多个列集合,也就是说在括号里面可以自由地用‘||’合并字符串。...,B2,B3 2 B4,B5 3 B6 注意:但当数据量比较大时,一般clob字段超过4000,却报ORA-01489:字符串连接结果过长。

1.6K20

Oracle列转行函数 Listagg() 语法详解及应用实例「建议收藏」

工作中用到一段比较复杂SQL查询脚本,使用了listagg()函数实现了具有多个值字段填充(即,列表聚合,list aggregation(我猜))。...说简单点,listagg()函数可以实现多列记录聚合为一条记录,从而实现数据压缩、致密化(data densification)。...————————————————————————- 这是一个Oracle列转行函数:LISTAGG() 先看示例代码: with temp as( select 'China' nation ,...Oracle Database SQL Language Reference上有关listagg()函数描述如下: —————————————————————————————————————————–...The return data type is RAW if the measure column is RAW; otherwise the return value is VARCHAR2.

11.4K10

Oracle数据库,简述常用Oracle内置函数

无论是在Oracle还是MySQL等数据库中都有其内置函数,即嵌入到主调函数中函数。Oracle内置函数能够大幅度提高程序执行效率,实现各种各样数据库功能。...下面我们来看看常用Oracle内置函数。 1、 nvl(expression1, expression2) 函数作用:从两个表达式中返回一个非null值 ?...4、 to_date(source_string, formater_string) 函数作用:将字符串转换为日期类型 ? 5、to_char() 函数作用:将其他类型转换为字符串类型 ?...7、 listagg() within group(order by field_name) over(partition by field_name) 函数作用:同wm_concat ?...9、sys_guid() 函数作用:产生并返回一个全球唯一标识符(原始值)由16个字节组成,32个字符 用例:select sys_guid() from dual; 注意:经常用来做表主键 10、

65020

【DB笔试面试459】ORA-00904: wm_concat:invalid identifier错误如何解决?

其实,WMSYS用户下WM_CONCAT函数有很重要用途,比如行转列,但是该函数不稳定。例如,在Oracle 10g上返回字符串类型,但是在Oracle 11gR2上返回是CLOB类型。...解决办法有两种,一种是采用Oracle本身脚本来创建WM_CONCAT函数,一种是采用自己创建函数来解决这个问题。...1、用Oracle自带脚本重建WMSYS用户WMSYS.WM_CONCAT函数 运行如下脚本卸载WMSYS用户数据: @$ORACLE_HOME/rdbms/admin/owmuinst.plb...对于LISTAGG函数,如果聚合内容太多就会报“ORA-01489: result of string concatenation is too long错误,那么这个时候可以从业务角度去修改SQL...& 说明: 有关字符串中是否含义汉字和多字节字符更多内容可以参考我BLOG:http://blog.itpub.net/26736162/viewspace-2124931/ 本文选自《Oracle

2.2K10

oracle wm_concat 拼接乱码

针对oracle拼接函数乱码,首先查询一下oracle字符编码是否支持中文,查询语句: SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER =...‘NLS_CHARACTERSET’; 如果是中文,则选择另一种方式: wmsys.wm_concat(to_char(….))..应该加上to_char() 在拼接字段加上转换。...想当年,在我们需要将某字段多行内容拼接起来时候,wm_concat提供了很好方法 这使得这个未公开函数,得到了广泛宣传与运用 但是,不公开,英文是undocumented,就意味着随时可能发生变更...这不,10.2.0.5上,其返回类型从varchar2变为了clob 而在12c当中,干脆就取消了此函数 优先: listagg(11g) > stragg(tomkyte) > 自定义PLSQL函数...实例: select listagg(TO_CHAR(A.zlmc),',') WITHIN GROUP(ORDER BY A.zlmc) rank from (select m.rowid, m.

1.8K20

字符转换SQL需求增强

上次《字符转换SQL需求》讨论需求,使用各种函数,实现了字符转换需求,但通过朋友指教,其实存在些问题。...这是原来写法, SQL> SELECT listagg(x.a, ';') within GROUP (ORDER BY x.a) FROM 2 (SELECT substr(regexp_substr...,所以用这种方法,对多条数据,是会有问题,如下所示,test存在两条数据,执行SQL,并不是我们需要结果,无法保证汇总后顺序, SQL> SELECT * FROM test;A--------...另外,朱大师给出了PG解法, ? 我只有EDB库,虽然是PG企业版,但这种写法,好像不支持, ? 黄老师则指出,用OracleSQL可以直接在达梦中跑。...谢谢各位朋友,若还有好建议,欢迎随时留言,谢谢。

58310

详细大纲版:oracle优化培训之第二期

其实在之前几个理论专题培训中, 已经加入了大量生产真实案例。为了能够让大家更好理解这些综合案例,第二期SQL写法与改写(侧重点是OLAP系统SQL)培训就要先给大家讲完。...keep及注意事项; first_value/last_value实现相同逻辑; with as几种用途及实战案例: 造测试数据 提高代码可读性 materialize...生产案例 递归 内嵌函数 connect by层级查询: 自顶向下查/自底向上查 展开连续区间写法 拆分逗号分隔字符串为多行...拆分表字段字符分隔字符两种方法 顺便讲一下合并: 多行记录合并为一行listagg listagg 19c前如何去重...直接用oracle提供utl_file做成函数, 并行快速导出 可以在应用代码调用,也可直接shell脚本调用 文本文件导入到表: sqlldr?

59510

ORA-00904: wm_concat:invalid identifier错误如何解决?

其实,WMSYS用户下WM_CONCAT函数有很重要用途,比如行转列,但是该函数不稳定。例如,在Oracle 10g上返回字符串类型,但是在Oracle 11gR2上返回是CLOB类型。...解决办法有两种,一种是采用Oracle本身脚本来创建WM_CONCAT函数,一种是采用自己创建函数来解决这个问题。...1、用Oracle自带脚本重建WMSYS用户WMSYS.WM_CONCAT函数 运行如下脚本卸载WMSYS用户数据: @$ORACLE_HOME/rdbms/admin/owmuinst.plb...,函数返回值是以逗号为分隔符字符串: SYS@lhrdb21> SELECT D.USER_ID FROM DBA_USERS D WHERE D.USER_ID IN (0, 5); USER_ID...“ORA-01489: result of string concatenation is too long错误,那么这个时候可以从业务角度去修改SQL,也可以使用WM_CONCAT函数返回CLOB

1K30
领券