Maison >base de données >tutoriel mysql >Comment diviser une chaîne délimitée par des virgules en plusieurs lignes dans Oracle ?

Comment diviser une chaîne délimitée par des virgules en plusieurs lignes dans Oracle ?

DDD
DDDoriginal
2025-01-22 17:47:09151parcourir

How to Split a Comma-Delimited String into Multiple Rows in Oracle?

Diviser la chaîne séparée par des virgules en plusieurs lignes dans Oracle

Le fractionnement d'une chaîne délimitée par des virgules en plusieurs lignes est une tâche courante de prétraitement et d'analyse des données dans Oracle Database. Bien qu'il existe de nombreuses façons d'y parvenir, nous allons examiner une méthode simple et efficace.

Une solution consiste à tirer parti des expressions régulières d'Oracle et à se connecter par fonctionnalité. Considérez le tableau suivant, où chaque enregistrement contient des erreurs séparées par des virgules :

名称 项目 错误
108 test Err1, Err2, Err3
109 test2 Err1

Notre objectif est d'extraire chaque erreur dans une ligne distincte, ce qui donne ce qui suit :

名称 项目 错误
108 test Err1
108 test Err2
108 test Err3
109 test2 Err1

Pour ce faire, nous utilisons une requête hiérarchique et regexp_substr pour extraire chaque erreur en fonction du nombre d'occurrences de l'erreur. La requête suivante illustre cette approche :

<code class="language-sql">with temp as (
    select 108 Name, 'test' Project, 'Err1, Err2, Err3' Error from dual
    union all
    select 109, 'test2', 'Err1' from dual
)
select distinct
  t.name, t.project,
  trim(regexp_substr(t.error, '[^,]+', 1, levels.column_value)) as error
from 
  temp t,
  table(cast(multiset(select level from dual connect by level <= length(regexp_replace(t.error, '[^,]+')) + 1) as sys.OdciNumberList)) levels
order by name</code>

Cette requête utilise des virgules pour remplacer la longueur de la chaîne (regexp_replace) et un mécanisme de requête hiérarchique pour créer une série de niveaux différents. Chaque niveau représente le nombre d'occurrences d'erreurs dans une chaîne séparée par des virgules. La fonction regexp_substr extrait ensuite les erreurs en fonction de leur nombre d'occurrences et le jeu de résultats final contient la sortie souhaitée.

Cette méthode fournit un moyen simple et efficace de diviser une chaîne délimitée par des virgules en plusieurs lignes dans Oracle 10g et versions ultérieures. Il exploite les puissantes capacités de manipulation de chaînes et les capacités de requête hiérarchique d'Oracle pour réaliser les transformations de données requises.

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