Oracle
 sql >> Datenbank >  >> RDS >> Oracle

REGEX, um den n-ten Wert aus einer Liste auszuwählen, wobei Nullen zulässig sind

Danke an die, die geantwortet haben. Nachdem ich Ihre Antworten und die Antworten im bereitgestellten Link durchgesehen hatte, kam ich zu dieser Lösung:

SQL> select REGEXP_SUBSTR('1,,3,4,5', '(.*?)(,|$)', 1, 2, NULL, 1) data
  2  from dual;

Data
----

Was sich wie folgt beschreiben lässt:„Sehen Sie sich das zweite Vorkommen eines optionalen Satzes von null oder mehr Zeichen an, auf die ein Komma oder das Ende der Zeile folgt, und geben Sie die erste Untergruppe zurück (das sind die Daten abzüglich des Kommas oder des Endes der Zeile).

Ich habe vergessen zu erwähnen, dass ich mit der Null an verschiedenen Positionen, mehreren Nullen, der Auswahl verschiedener Positionen usw. getestet habe.

Die einzige Einschränkung, die ich finden konnte, ist, wenn das Feld, nach dem Sie suchen, größer als die verfügbare Anzahl ist, gibt es nur NULL zurück, also müssen Sie sich dessen bewusst sein. In meinem Fall kein Problem.

BEARBEITEN:Ich aktualisiere die akzeptierte Antwort zugunsten zukünftiger Suchender, die möglicherweise darauf stoßen.

Der nächste Schritt besteht darin, den Code zu kapseln, damit er in eine einfachere, wiederverwendbare Funktion umgewandelt werden kann. Hier ist die Funktionsquelle:

  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;

Dies verbirgt die Regex-Komplexität vor Entwicklern, die damit möglicherweise nicht so vertraut sind, und macht den Code bei der Verwendung trotzdem sauberer. Nennen Sie es so, um das 4. Element zu erhalten:

select get_list_element('123,222,,432,555', 4) from dual;