Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment diviser une colonne varchar en plusieurs valeurs en SQL ?

Enveloppez la valeur dans le délimiteur que vous utilisez dans la liste délimitée, puis vérifiez s'il s'agit d'une sous-chaîne de la liste délimitée (également avec les délimiteurs qui l'entourent) :

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;

je dois garder la logique dans la whereClause

Vraiment, non. La requête ci-dessus sera beaucoup plus efficace.

Mais si vous devez alors :

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