Diviser les valeurs des colonnes VARCHAR en SQL
En SQL, le type de données VARCHAR stocke des chaînes de caractères de longueur variable. Lorsque vous traitez des colonnes VARCHAR, il peut être nécessaire de diviser les valeurs de colonne en plusieurs valeurs individuelles.
Supposons que vous ayez une instruction SQL SELECT comme celle-ci :
SELECT AD_Ref_List.Value FROM AD_Ref_List WHERE AD_Ref_List.AD_Reference_ID= 1000448
Cette instruction renvoie tous les valeurs de la colonne Value de la table AD_Ref_List où la colonne AD_Reference_ID est égale à 1000448. Le résultat peut ressembler à ceci :
Value |
---|
CO,VO |
Dans ce résultat, la colonne Valeur contient une liste de valeurs séparées par des virgules. Pour filtrer davantage les résultats, vous souhaiterez peut-être diviser les valeurs en lignes individuelles, telles que :
Value |
---|
CO |
VO |
Une façon d'y parvenir est d'utiliser l'opérateur IN, comme ceci :
SELECT AD_Ref_List.Value FROM AD_Ref_List WHERE AD_Ref_List.AD_Reference_ID= 1000448 AND AD_Ref_List.Value IN (SELECT xx_insert.XX_DocAction_Next FROM xx_insert WHERE xx_insert_id = 1000283 ) ;
Cependant, cette requête peut ne renvoyer aucune ligne car Oracle traite la liste de valeurs comme une seule chaîne, et non comme des valeurs individuelles. Pour résoudre ce problème, vous pouvez utiliser la technique suivante :
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;
Cette requête utilise l'opérateur LIKE pour vérifier si la valeur de la table AD_Ref_List est une sous-chaîne de la liste de valeurs de la table xx_insert. Cela renverra le résultat souhaité, chaque valeur de la colonne Valeur apparaissant sur une ligne distincte.
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!