当前位置: 首页 > 面试题库 >

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

周瀚
2023-03-14
问题内容

通常,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()


问题答案:

您可能要使用
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



 类似资料:
  • 问题内容: 是否可以从“。”更改小数逗号。(点)到MySQL输出中的其他字符(逗号)?我不想使用像这样的函数,我只想使用我通常使用的所有查询,而无需进行任何修改。我正在寻找(一些变量,语言环境等)设置。我试图搜索手册,但没有成功。 问题答案: 不,你不能。这就是SQL标准,而MySQL遵循它(至少在这一点上)。 问题并不是输出的真正问题(如您所提到的,大多数DBMS中都有各种功能),而是输出。如果

  • 尽管已将pcs区域分隔符更改为“.”Netbeans 12仍在使用“,”。我已经尝试将以下内容添加到netbeans中。conf文件,但它不起作用: -J-Duser.language=en-J-Duser.country=US 如何通过conf文件强制netbeans使用特定的本地文件?

  • 但ibatis会抛出以下错误: ...执行时出错:delimiter//drop函数if存在get_next_value_test//create函数get_next_value_test(p_name varchar(30))返回int deterministic sql security invoker begin declare current_val integer。原因:com.mysq

  • 我正在从SAP Hybris导出数据。我导入的数据也有分号(;)。在导出的数据中,我看到分隔符是;这阻止了我拆分数据和工作。有没有办法把这个分隔符改成别的? 我知道这可以通过更改“csv.fieldseparator”属性来实现,但这会影响到所有地方,我在生产中负担不起。。如有任何建议,将不胜感激

  • 问题内容: 这似乎是一个愚蠢的问题,但是此函数是否会实际影响变量(我将如何使用此变量的上下文更大,但这基本上是我不确定的问题)?(我专门问有关java) 问题答案: 考虑一个稍微不同的示例: 运行该程序的输出为: 该变量将更改为true,但是一旦方法返回,该参数变量就会消失(这就是人们所说的“超出范围”的意思)。但是,传递给方法的变量保持不变。

  • 问题内容: 我已经编写了一个JavaScript函数,该函数使用setInterval每隔十分之一秒的时间对字符串进行一定次数的迭代。 我不想将间隔设置为特定的数字,而是希望每次运行时都基于一个计数器对其进行更新。所以代替: 就像这样: 不幸的是,那没有用。似乎“ 10 *计数器”等于0。 因此,如何在每次匿名函数运行时调整时间间隔? 问题答案: 使用代替。然后,回调将负责引发下一个超时,此时您可