2011-04-01 17 views
1

我有一些SQL,我想正确格式的邮件(直接从SQL生成 - 不要问!)。代码如下:在Oracle SQL中连接字符串? (wm-concat)

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

好的,所以这种有用 - 但它在每行的末尾放置一个逗号。愚蠢的问题,可能相当微不足道,但无论如何,请删除逗号吗?我认为这是由wm_concat功能

由于添加

回答

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" 

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

0

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

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

刚刚修剪字符串尾随逗号:

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

Oracle 10g中提供wm_concat用于解决线重新划分的需求非常方便的功能,这个函数很容易使用,但函数只提供','这种分隔符。 事实上,只要一些简单的转换可以使用分离的其它的分隔符,首先想到的是用叔替换功能

如(选择从双联盟“一个” X选择从双“B”)

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

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

具有t为(选择从双联盟 '一个' X选择 'B' y的双)

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

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

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