在Oracle SQL中连接字符串? (WM-的concat)

时间:2011-04-01 12:45:05

标签: sql oracle concatenation

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

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

好的,所以这种方法有用 - 但它在每一行的末尾放置一个逗号。愚蠢的问题,也可能是相当微不足道的,但是反正可以删除逗号吗?我认为它是由wm_concat函数添加的

由于

4 个答案:

答案 0 :(得分:7)

是的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"

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:1)

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

  

用t as(从双联合中选择'a'x从双重选择'b')

     

从t中选择替换(wm_concat(x),',',' - ');

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

  

用t as(选择'a'x from dual union select'b'y from dual)

     

从t中选择substr(替换(wm_concat('%'|| x),',%',' - '),2);

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

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

答案 3 :(得分:0)

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

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