Heim > Datenbank > MySQL-Tutorial > Wie extrahiere ich den N-ten Wert zuverlässig aus einer durch Kommas getrennten Liste in SQL und verarbeite Nullen?

Wie extrahiere ich den N-ten Wert zuverlässig aus einer durch Kommas getrennten Liste in SQL und verarbeite Nullen?

Mary-Kate Olsen
Freigeben: 2025-01-03 16:44:41
Original
889 Leute haben es durchsucht

How to Reliably Extract the Nth Value from a Comma-Separated List in SQL, Handling Nulls?

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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)
Nach dem Login kopieren

Diese Regex erfasst die Daten vor dem n-ten Vorkommen eines Kommas oder dem Ende der Zeile. Das Ergebnis ist:

Data
----
Nach dem Login kopieren

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;
Nach dem Login kopieren

Diese Funktion kann wie folgt aufgerufen werden:

select get_list_element('123,222,,432,555', 4) from dual;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage