我想选择几个字段的串联,但它们之间有一个分隔符。仅当两个操作数都不为空时,分隔符才应存在。
因此,对于 的记录a='foo', b=NULL, c='bar'
,我想得到结果abc='foo;bar'
(不是'foo;;bar'
)。
我想要一个这样的功能concat_sep(a, b, ';')
,只添加';' 如果 a 和 b 都不为空,则介于两者之间。
当然,我可以像这样使用 nvl2:
select
a, b, c,
substr(abc, 1, length(abc) - 1) as abc
from
(select
a, b, c,
nvl2(a, a || ';', '') || nvl2(b, b || ';', '') || nvl2(c, c || ';', '') as abc
from
Table1)
但是正如你所看到的,这段代码很快就会变得阻塞,尤其是当你有超过 3 列并且你给它们取了合理的名称而不是 a、b 和 c 时。;-)
我找不到更短、更容易或更易读的方法,但我想在完全放弃之前我会在这里问一下(或者自己浪费时间编写这样的函数)。