Tak til dem, der har svaret. Efter at have læst dine svar og svarene i det medfølgende link nåede jeg frem til denne løsning:
SQL> select REGEXP_SUBSTR('1,,3,4,5', '(.*?)(,|$)', 1, 2, NULL, 1) data
2 from dual;
Data
----
Hvilket kan beskrives som "se på den 2. forekomst af et valgfrit sæt af nul eller flere tegn, efterfulgt af et komma eller slutningen af linjen, og returner den 1. undergruppe (som er data minus kommaet eller slutningen af linje).
Jeg glemte at nævne, at jeg testede med null i forskellige positioner, flere nuller, valg af forskellige positioner osv.
Den eneste advarsel, jeg kunne finde, er, at hvis feltet du leder efter er større end det tilgængelige antal, returnerer det bare NULL, så du skal være opmærksom på det. Ikke et problem for mit tilfælde.
EDIT:Jeg opdaterer det accepterede svar til gavn for fremtidige søgere, der kan falde over dette.
Det næste trin er at indkapsle koden, så den kan gøres til en enklere, genbrugelig funktion. Her er funktionskilden:
FUNCTION GET_LIST_ELEMENT(string_in VARCHAR2, element_in NUMBER, delimiter_in VARCHAR2 DEFAULT ',') RETURN VARCHAR2 IS
BEGIN
RETURN REGEXP_SUBSTR(string_in, '(.*?)(\'||delimiter_in||'|$)', 1, element_in, NULL, 1);
END GET_LIST_ELEMENT;
Dette skjuler regex-kompleksiteten for udviklere, som måske ikke er så komfortable med det, og gør koden renere alligevel, når den er i brug. Kald det sådan her for at få det 4. element:
select get_list_element('123,222,,432,555', 4) from dual;