Oracle: Concat mit Trennzeichen, aber nur, wenn beide Operanden NICHT NULL sind

Ich möchte eine Verkettung mehrerer Felder auswählen, die jedoch durch ein Trennzeichen voneinander getrennt sind. Das Trennzeichen sollte nur vorhanden sein, wenn beide Operanden nicht null sind.

Also für eine Platte mita='foo', b=NULL, c='bar'Ich möchte das Ergebnis erhaltenabc='foo;bar' (nicht'foo;;bar').

Ich hätte gerne eine Funktion wieconcat_sep(a, b, ';') das fügt nur das ';' dazwischen, wenn sowohl a als auch b nicht null sind.

Natürlich kann ich nvl2 so benutzen:

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)

Aber wie Sie sehen, wird dieser Code bald unübersichtlich, insbesondere wenn Sie mehr als drei Spalten haben und ihnen sinnvolle Namen anstelle von a, b und c gegeben haben. ;-)

Ich konnte keinen kürzeren, einfacheren oder besser lesbaren Weg finden, aber ich dachte, ich würde hier fragen, bevor ich ganz aufgeben würde (oder Zeit damit verschwenden, eine solche Funktion selbst zu schreiben).

Antworten auf die Frage(2)

Ihre Antwort auf die Frage