我一直在使用LISTAGG为报告制作逗号分隔列表,但我被要求添加"和"在最后一个元素之前。所以现在我对3种不同情况的输出是:
First, Second, Third
First, Second
First
但现在所需的输出是:
First, Second, and Third
First and Second
First
我考虑过做一个案例何时,检查计数,如果有2,那么使用'和'作为分隔符,但我怎么能为2个以上的元素做这个呢?
由于
答案 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
);