小编典典

更改Oracle 11gR2的WM_CONCAT函数的分隔符

sql

通常,WM_CONCAT是一个聚合函数,它从表中返回用逗号分隔的值,如下所示。

假设我有一个foo像这样的表:

col_id     | col_text


111        | This

111        | is

111        | a

111        | test.

如果我使用此查询:

SELECT CAST(WM_CONCAT(col_text) AS VARCHAR2(100)), col_id FROM foo

结果将是

This, is, a, test.

是否有可能改变分离器(',')到其他字符,如'.''|'的的WM_CONCAT()功能?

还是创建一个可以像这样执行的用户定义函数WM_CONCAT()


阅读 360

收藏
2021-05-05

共1个答案

小编典典

您可能要使用
LISTAGG

SELECT col_id, 
       LISTAGG(col_text, '|') WITHIN GROUP (ORDER BY col_text) text
  FROM table1
 GROUP BY col_id

输出:

| COL_ID |            TEXT |
----------------------------
|    111 | This|a|is|test. |

SQLFiddle

更新 如果您需要在列表中获取不同的文本值

SELECT col_id, 
       LISTAGG(col_text, '|')
         WITHIN GROUP (ORDER BY col_text) text
  FROM 
(
  SELECT DISTINCT col_id, col_text
    FROM table1
)
 GROUP BY col_id

SQLFiddle

2021-05-05