Comment diviser une colonne VARCHAR délimitée en plusieurs valeurs dans SQL et effectuer des correspondances de sous-chaînes
Votre requête d'origine tente de filtrer la "AD_Ref_List" table basée sur une liste délimitée de valeurs stockées dans la table "xx_insert". Cependant, Oracle traite les valeurs séparées par des virgules comme une seule chaîne, ce qui n'entraîne aucune correspondance de lignes.
Pour résoudre ce problème, envisagez les approches suivantes :
Utilisation d'une correspondance de sous-chaîne de chaîne avec Délimiteurs :
Enveloppez à la fois la valeur de la colonne et la liste délimitée dans des délimiteurs et effectuez une correspondance de sous-chaîne. Cela garantit que les correspondances exactes sont trouvées dans la liste délimitée.
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;
Utilisation d'une expression régulière pour diviser la liste délimitée :
Extraire les valeurs individuelles de la liste délimitée en utilisant une expression régulière et une sous-requête. Ensuite, effectuez une correspondance basée sur la valeur dans la requête principale.
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, '[^,]+' ) );
Considérations :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!