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

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

Итак, для записи с 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. ;-)

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

9
задан GolezTrol 12 July 2012 в 14:32
поделиться