„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann man den n-ten Wert zuverlässig aus einer von Kommas getrennten Liste in SQL, die Nulls bearbeiten, aus extrahieren?

Wie kann man den n-ten Wert zuverlässig aus einer von Kommas getrennten Liste in SQL, die Nulls bearbeiten, aus extrahieren?

Gepostet am 2025-02-12
Durchsuche:149

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

Regex-Lösung für die Auswahl eines bestimmten Wert () kann es schwierig sein, Nullwerte zu behandeln. Hier ist eine detaillierte Prüfung des Problems und eine umfassende Lösung.

Erstens betrachten Sie das folgende Szenario:

SQL> Wählen Sie Regexp_Substr ('1,2,3,5,6', aus. '[^,]', 1, 2) Daten von Dual; D - - 2

Diese Abfrage ruft erfolgreich den zweiten Nicht-Null-Wert ("2") aus der Liste mit dem regulären Ausdruck [^,] ab. Wenn der zweite Wert jedoch null ist, gibt die Abfrage das dritte Element zurück:
SQL> select REGEXP_SUBSTR('1,2,3,4,5,6', '[^,] ', 1, 2) data
from dual;

D
-
2
SQL> Wählen Sie regexp_substr ('1, 3,4,5,6', '[^,]', 1, 2 ) Daten von Dual; D - - 3

Um dieses Problem anzusprechen, ist ein flexiblerer Regex erforderlich, um optionale Zeichen zuzulassen:
SQL> select REGEXP_SUBSTR('1,2,3,4,5,6', '[^,] ', 1, 2) data
from dual;

D
-
2
SQL> Wählen Sie Regexp_substr ('1, 3,4,5,6', '[ ^,]*', 1, 4) Daten von Dual; D - - 3

Dieser Regex ist jedoch auch für Zahlen, die über die Null hinausgehen. 4,5 ',' (.*?) (, | $) ', 1, 2, Null, 1)
SQL> select REGEXP_SUBSTR('1,2,3,4,5,6', '[^,] ', 1, 2) data
from dual;

D
-
2
Dieser Regex erfasst die Daten vor dem n -ten Auftreten eines Kommas oder dem Ende der Zeile . Das Ergebnis ist:

Daten ----

, um diese Lösung in eine wiederverwendbare Funktion zu kompensieren, betrachten Sie den folgenden Code:
SQL> select REGEXP_SUBSTR('1,2,3,4,5,6', '[^,] ', 1, 2) data
from dual;

D
-
2
Funktion get_list_element (string_in varchar2, element_in number, delimiter_in varchar2 standards ',') return varchar2 IS IS IS IS BEGINNEN Return regexp_substr (string_in, '(.*?) (\' || delimiter_in || '$)', 1, element_in, null, 1); End get_list_element;

Diese Funktion kann so genannt werden:
SQL> select REGEXP_SUBSTR('1,2,3,4,5,6', '[^,] ', 1, 2) data
from dual;

D
-
2
wählen Sie get_list_element ('123,222, 432,555', 4) aus Dual; Diese Lösung wird ausgewählt und bietet eine robuste und elegante Methode zum Extrahieren von Werten aus von Kommas getrennten Listen in Oracle SQL.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3