我有一些SQL,我想为mailout正确格式化(直接从SQL生成 - 不要问!)。代码如下:
SELECT wm_concat('<br>• ' || FIELD1 || ' ' || FIELD2 || ' : ' || FIELD 3 || ' text') AS "Team"
好的,所以这种方法有用 - 但它在每一行的末尾放置一个逗号。愚蠢的问题,也可能是相当微不足道的,但是反正可以删除逗号吗?我认为它是由wm_concat函数添加的
由于
答案 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)
但是考虑到字符串本身可能包含','字符,使用上面的SQL会导致错误的结果,而且还对上面的SQL做了一些修改。用t as(从双联合中选择'a'x从双重选择'b')
从t中选择替换(wm_concat(x),',',' - ');
用t as(选择'a'x from dual union select'b'y from dual)
从t中选择substr(替换(wm_concat('%'|| x),',%',' - '),2);
在上面的SQL中用'%'作为分隔符,然后替换'%'来删除错误。该程序假定字符串不存在于'%'字符串中以替换SQL中的'%'也可以使用其他特殊字符。
答案 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