使用"和"的逗号分隔列表在Oracle SQL中的Last Element之前连接

时间:2014-10-28 14:34:18

标签: sql oracle oracle11g

我一直在使用LISTAGG为报告制作逗号分隔列表,但我被要求添加"和"在最后一个元素之前。所以现在我对3种不同情况的输出是:

First, Second, Third
First, Second
First

但现在所需的输出是:

First, Second, and Third
First and Second
First

我考虑过做一个案例何时,检查计数,如果有2,那么使用'和'作为分隔符,但我怎么能为2个以上的元素做这个呢?

由于

1 个答案:

答案 0 :(得分:2)

您可以尝试使用regexp_replace:

select regexp_replace('First, Second, Third', ',([^,]+)$', ' and\1') from dual;

,([^,]+)找到最后一个逗号+除逗号以外的任何内容,直到字符串结尾,并将其替换为“和”+“()”中的第一个表达式

(如果您的expr不包含逗号,它应该有效)

整个例子:

select regexp_replace(listagg(name, ', ') within group (order by name), ',([^,]+)$', ' and\1') from (
  select 'First' name from dual
  union all select 'Second' from dual
  union all select 'Third' from dual
);