Regex-Lösung zum Auswählen eines bestimmten Werts aus einer durch Kommas getrennten Liste mit Nullen
Beim Extrahieren des n-ten Werts aus einer durch Kommas getrennten Liste mit REGEXP_SUBSTR () kann der Umgang mit Nullwerten schwierig sein. Hier finden Sie eine detaillierte Untersuchung des Problems und eine umfassende Lösung.
Betrachten Sie zunächst das folgende Szenario:
SQL> select REGEXP_SUBSTR('1,2,3,4,5,6', '[^,]+', 1, 2) data from dual; D - 2
Diese Abfrage ruft erfolgreich den zweiten Nicht-Null-Wert („2“) ab die Liste mit dem regulären Ausdruck [^,] . Wenn der zweite Wert jedoch null ist, gibt die Abfrage das dritte Element zurück:
SQL> select REGEXP_SUBSTR('1,,3,4,5,6', '[^,]+', 1, 2) data from dual; D - 3
Um dieses Problem zu beheben, ist ein flexiblerer regulärer Ausdruck erforderlich, der optionale Zeichen zulässt:
SQL> select REGEXP_SUBSTR('1,,3,4,5,6', '[^,]*', 1, 4) data from dual; D - 3
Allerdings schlägt dieser reguläre Ausdruck auch für Zahlen über der Null fehl.
Letztendlich liegt die Lösung in einer ausgefeilteren Lösung Regex:
REGEX_SUBSTR('1,,3,4,5', '(.*?)(,|$)', 1, 2, NULL, 1)
Diese Regex erfasst die Daten vor dem n-ten Vorkommen eines Kommas oder dem Ende der Zeile. Das Ergebnis ist:
Data ----
Um diese Lösung in eine wiederverwendbare Funktion zu kapseln, berücksichtigen Sie den folgenden Code:
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;
Diese Funktion kann wie folgt aufgerufen werden:
select get_list_element('123,222,,432,555', 4) from dual;
Unabhängig von möglichen Nullen oder dem ausgewählten Element bietet diese Lösung eine robuste und elegante Methode zum Extrahieren von Werten aus durch Kommas getrennten Listen in Oracle SQL.
Das obige ist der detaillierte Inhalt vonWie extrahiere ich den N-ten Wert zuverlässig aus einer durch Kommas getrennten Liste in SQL und verarbeite Nullen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!