Oracle: Concat с разделителем, но только если оба операнда не равны NULL

Я хочу выбрать объединение нескольких полей, но с разделителем между ними. Разделитель должен присутствовать только в том случае, если оба операнда не равны нулю.

Так что для записи сa='foo', b=NULL, c='bar'Хочу получить результатabc='foo;bar' (не'foo;;bar').

Я хотел бы иметь такую функцию, какconcat_sep(a, b, ';') это только добавляет «;»; между ними, если и a, и b не равны NULL.

Конечно, я могу использовать 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. ;-)

Я не мог найти более короткий, простой или более читаемый способ, но я подумал, что я должен спросить здесь, прежде чем полностью отказаться (или потратить время на написание такой функции самостоятельно).

Ответы на вопрос(2)

Ваш ответ на вопрос