Diviser une colonne VARCHAR en plusieurs valeurs dans SQL
Problème :
Lors de la récupération des valeurs à partir d'une colonne VARCHAR à l'aide d'une clause IN, Oracle transforme la liste délimitée en une chaîne entre guillemets simples, empêchant ainsi le sous-requête à partir de valeurs individuelles correspondantes.
Solution 1 :
Enveloppez les valeurs de liste délimitées dans la clause IN avec le même délimiteur utilisé dans la colonne VARCHAR. Par exemple, au lieu d'utiliser AD_Ref_List.Value IN ('CO','VO'), utilisez AD_Ref_List.Value IN (',' || 'CO' || ',' || 'VO' || ',') .
Solution 2 (clause Where alternative) :
Utiliser une expression régulière basée technique avec la fonction REGEXP_SUBSTR pour extraire des valeurs individuelles de la liste délimitée à des niveaux spécifiés. Par exemple, la requête suivante utilise la récursion pour diviser la liste délimitée :
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, '[^,]+') );
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!