Wo ist das Problem?

Verwende dazu die Tablefunction Split:
https://www.ibm.com/docs/en/i/7.5?to...table-function

select table(systools.split(charfeld, '##'))
from mytable

Ich habe z.B. auch das Problem, dass für Bildschirmauswahlen Multiselect-Listen angeboten werden sollen. Der User kreuzt nun mehrere Elemente an und ich bekomme eine Kommaseparierte Liste zurück.
Diese verwende ich dann z.B. in der Where-Klausel:

where name in (select * from table(systools.split(: Param, ','))
Funktioniert hervorragend.

Das Gegenstück dazu ist die Funktion LISTAGG, mit der man mehrere Zeilen wieder in einen String packen kann.

Nachtrag:
Deine 18 Felder kannst du ja auch u.U. per concat erst zusammen führen:
F1 concat '##' concat F2 .....

Wenn du leere Felder ausschließen willst:

concat case Fx when '' then '' else '##' concat Fx end