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