Я хочу выбрать конкатенацию пары полей, но с разделителем между ними. Разделитель должен быть только в том случае, если оба операнда не равны нулю.
Итак, для записи с 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)
Но, как видите, этот код вскоре становится загроможденным, особенно если у вас больше трех столбцов и вы дали им осмысленные имена вместо a, b и c. ;-)
Я не смог найти более короткий, простой или более читаемый способ, но я решил спросить здесь, прежде чем полностью сдаться (или тратить время на написание такой функции самостоятельно ).