Maison >base de données >tutoriel mysql >Comment diviser une chaîne délimitée par des virgules en plusieurs lignes dans 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!