Aufteilen einer VARCHAR-Spalte in mehrere Werte in SQL
Der VARCHAR-Datentyp in SQL ermöglicht die Speicherung von Zeichendaten variabler Länge. Oft ist es notwendig, eine VARCHAR-Spalte in mehrere Werte aufzuteilen, um die Datenfilterung oder andere Vorgänge zu erleichtern.
Betrachten Sie das folgende Beispiel:
SELECT AD_Ref_List.Value FROM AD_Ref_List WHERE AD_Ref_List.AD_Reference_ID= 1000448
Diese Abfrage ruft eine Spalte mit dem Namen „Wert“ ab. aus der Tabelle „AD_Ref_List“, wobei die Spalte „AD_Reference_ID“ gleich 1000448 ist. Das Ergebnis ist eine Liste von Werte:
CO,VO
Die Anforderung besteht jedoch darin, die Ergebnisse basierend auf Werten einzuschränken, die in einer anderen Tabelle „xx_insert“ gespeichert sind:
SELECT xx_insert.XX_DocAction_Next FROM xx_insert WHERE xx_insert_id = 1000283
Das Ergebnis dieser Abfrage ist:
CO
Die Herausforderung besteht darin, die ursprüngliche Abfrage so zu ändern, dass sie die Werte aus „xx_insert“ einbezieht und gleichzeitig das durch Kommas getrennte Format beibehält. Beim ersten Versuch wurden die Werte in eine durch Trennzeichen getrennte Zeichenfolge umgewandelt:
AD_Ref_List.Value IN ('CO,VO')
Was nicht das gewünschte Ergebnis ist.
Lösung:
Um dieses Problem zu beheben Bei diesem Problem sollten die Werte in der IN-Klausel mit dem entsprechenden Trennzeichen umschlossen und anhand einer durch Kommas getrennten Liste überprüft werden, die ebenfalls in eingeschlossen ist Trennzeichen:
SELECT r.Value FROM AD_Ref_List r INNER JOIN xx_insert x ON ( ',' || x.XX_DocAction_Next || ',' LIKE '%,' || r.value || ',%' ) WHERE r.AD_Reference_ID = 1000448 AND x.xx_insert_id = 1000283;
Diese Technik ermöglicht die Identifizierung von Werten, die mit der durch Kommas getrennten Liste übereinstimmen. Alternativ kann auch ein effizienterer Ansatz mit Zeilenwertfilterung verwendet werden:
SELECT Value FROM AD_Ref_List WHERE AD_Reference_ID = 1000448 AND value IN ( SELECT REGEXP_SUBSTR( XX_DocAction_Next, '[^,]+', 1, LEVEL ) FROM xx_insert WHERE xx_insert_id = 1000283 CONNECT BY LEVEL <= REGEXP_COUNT( XX_DocAction_Next, '[^,]+' ) );
Beide Lösungen teilen die VARCHAR-Spalte effektiv in mehrere Werte auf und filtern basierend auf den angegebenen Werten, wodurch das bei der ersten Lösung aufgetretene Problem behoben wird Abfrage.
Das obige ist der detaillierte Inhalt vonWie kann man eine durch Kommas getrennte VARCHAR-Spalte in SQL effizient aufteilen und filtern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!