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

Wie teilt man eine varchar-Spalte als mehrere Werte in SQL auf?

Schließen Sie den Wert in das Trennzeichen ein, das Sie in der Trennzeichenliste verwenden, und prüfen Sie dann, ob es sich um eine Teilzeichenfolge der Trennzeichenliste handelt (auch mit den umschlossenen 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;

Ich muss die Logik in der WhereClause beibehalten

Wirklich nicht. Die obige Abfrage wird viel effizienter sein.

Aber wenn es sein muss:

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, '[^,]+' )
);