Dzięki tym, którzy odpowiedzieli. Po przejrzeniu twoich odpowiedzi i odpowiedzi w podanym linku doszedłem do tego rozwiązania:
SQL> select REGEXP_SUBSTR('1,,3,4,5', '(.*?)(,|$)', 1, 2, NULL, 1) data
2 from dual;
Data
----
Które można opisać jako „spójrz na drugie wystąpienie opcjonalnego zestawu zero lub więcej znaków, po których następuje przecinek lub koniec wiersza, i zwróć pierwszą podgrupę (czyli dane bez przecinka lub końca linia).
Zapomniałem wspomnieć, że testowałem z wartościami null w różnych pozycjach, wielokrotnymi wartościami null, wybierając różne pozycje itp.
Jedynym zastrzeżeniem, jakie mogłem znaleźć, jest to, że jeśli pole, którego szukasz, jest większe niż dostępna liczba, po prostu zwraca NULL, więc musisz być tego świadomy. To nie problem w moim przypadku.
EDYCJA:Aktualizuję zaakceptowaną odpowiedź z korzyścią dla przyszłych wyszukiwarek, które mogą się na to natknąć.
Następnym krokiem jest enkapsulacja kodu, aby można go było przekształcić w prostszą funkcję wielokrotnego użytku. Oto źródło funkcji:
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;
Ukrywa to złożoność wyrażeń regularnych przed programistami, którzy mogą nie czuć się z tym tak dobrze, i sprawia, że kod i tak jest czystszy, gdy jest używany. Nazwij to tak, aby uzyskać czwarty element:
select get_list_element('123,222,,432,555', 4) from dual;