Maison >base de données >tutoriel mysql >Comment diviser une colonne VARCHAR délimitée dans SQL pour la correspondance de sous-chaînes ?

Comment diviser une colonne VARCHAR délimitée dans SQL pour la correspondance de sous-chaînes ?

DDD
DDDoriginal
2024-12-26 08:03:11710parcourir

How to Split a Delimited VARCHAR Column in SQL for Substring Matching?

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 :

  1. Choisissez l'approche qui correspond le mieux à vos exigences en matière de performances et de données. .
  2. Assurez-vous que la valeur de la colonne et la liste délimitée sont systématiquement formatées avec le même délimiteur.
  3. Envisagez d'utiliser une procédure ou une fonction stockée pour encapsuler la logique de fractionnement pour une réutilisation et une maintenance plus facile.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn