【问题标题】:Concatenate string in Oracle SQL? (wm-concat)在 Oracle SQL 中连接字符串? (wm-连接)
【发布时间】:2011-07-27 16:18:18
【问题描述】:

我有一些 SQL,我想为邮件输出正确格式化(直接从 SQL 生成 - 不要问!)。代码如下:

SELECT   wm_concat('<br>• ' || FIELD1 || ' ' || FIELD2 || ' : ' || FIELD 3 || ' text') AS "Team"

好的,所以这有点工作 - 但它在每行的末尾放置一个逗号。愚蠢的问题,可能很微不足道,但是无论如何都可以删除逗号吗?我认为它是由 wm_concat 函数添加的

谢谢

【问题讨论】:

    标签: sql oracle concatenation


    【解决方案1】:

    是的,WM_CONCAT 函数在它连接的每个值之间放置一个逗号。

    如果您的数据中没有逗号,您可以这样做:

    SELECT replace (wm_concat('<br>• ' || FIELD1 || ' ' || FIELD2 || ' : ' 
                              || FIELD 3 || ' text'),
                   ',', null) AS "Team"
    

    如果您使用 11G,则可以改用新的 LISTAGG 功能:

    SELECT LISTAGG ('<br>• ' || FIELD1 || ' ' || FIELD2 || ' : '
                    || FIELD 3 || ' text')
             WITHIN GROUP (ORDER BY <something>) AS "Team"
    

    这将产生一个没有逗号的结果。

    【讨论】:

      【解决方案2】:

      只需修剪尾随逗号的字符串:

      RTRIM( wm_concat(...), ',' )
      

      【讨论】:

        【解决方案3】:

        Oracle 10g 提供了一个非常方便的函数wm_concat 用来解决行重分类的需求,这个函数非常好用,但是该函数只提供了','这种分隔符。 其实只要一些简单的转换就可以用其他的分隔符隔开,首先想到的就是替换函数

        with t as(select 'a' x from dual union select 'b' from dual )

        select replace(wm_concat(x),',','-') from t;

        但考虑到字符串本身可能包含','字符,使用上面的SQL会导致错误的结果,还要对上面的SQL做了一些改动。

        with t as(select 'a' x from dual union select 'b' y from dual)

        select substr(replace(wm_concat('%'||x),',%','-'),2) from t;

        在上面的SQL 中通过一个'%' 作为分隔符,然后替换'%' 来消除错误。程序假定字符串内不存在'%'字符串来代替'%',在SQL中也可以使用其他特殊字符。

        来源:http://www.databaseskill.com/3400944/

        【讨论】:

          【解决方案4】:

          您可以在 Oracle 中创建自己的聚合函数并使用它们来聚合字符串。
          或者使用 Tom Kyte 写的 StrAgg 函数:http://www.sqlsnippets.com/en/topic-11591.html

          SELECT StrAgg('<br>• ' || FIELD1 || ' ' || FIELD2 || ' : ' || FIELD 3 || ' text') AS "Team"
          FROM   Abc
          

          【讨论】:

            猜你喜欢
            • 2018-03-06
            • 2013-12-14
            • 2021-05-02
            • 1970-01-01
            • 2021-09-25
            • 1970-01-01
            • 1970-01-01
            • 2021-09-01
            • 1970-01-01
            相关资源
            最近更新 更多