wm_concat()
和 listagg()
都是 Oracle 数据库中用于将多行数据合并成一个字符串的聚合函数
功能:
wm_concat()
:此函数主要用于将多行数据合并成一个以逗号分隔的字符串。它可以处理非空值,但不会删除空值或重复值。listagg()
:此函数也可以将多行数据合并成一个字符串,但它提供了更多的选项和灵活性。例如,可以指定分隔符、排序和过滤重复值等。语法:
wm_concat()
:语法相对简单,只需要一个参数,即要合并的列名。listagg()
:语法较为复杂,需要指定要合并的列名、分隔符(可选)和排序条件(可选)。分隔符:
wm_concat()
:默认使用逗号作为分隔符,但不能自定义分隔符。listagg()
:可以指定任意字符作为分隔符。排序:
wm_concat()
:不支持排序。listagg()
:支持根据指定的列和排序方式对结果进行排序。去重:
wm_concat()
:不会删除重复值。listagg()
:可以通过添加 DISTINCT
关键字来删除重复值。兼容性:
wm_concat()
:这是一个非标准的函数,主要在早期的 Oracle 版本中使用。在较新的版本中,建议使用 listagg()
。listagg()
:这是一个标准的聚合函数,从 Oracle 11g R2 开始引入。它具有更好的兼容性和功能。总之,listagg()
是一个更强大、更灵活的函数,它提供了更多的选项和功能。在实际应用中,建议使用 listagg()
而不是 wm_concat()
。