Maison > base de données > tutoriel mysql > Comment puis-je diviser facilement des valeurs séparées par des virgules dans SQLite à l'aide d'expressions de table communes ?

Comment puis-je diviser facilement des valeurs séparées par des virgules dans SQLite à l'aide d'expressions de table communes ?

DDD
Libérer: 2025-01-03 00:11:42
original
594 Les gens l'ont consulté

How Can I Easily Split Comma-Separated Values in SQLite Using Common Table Expressions?

Création d'une approche simple pour diviser des valeurs séparées par des virgules dans SQLite

Introduction

Extraire des valeurs individuelles séparées par des virgules les chaînes sont une exigence courante dans l’analyse des données. Dans SQLite, il n'existe pas d'équivalent simple à la fonction SubString() de SQL, ce qui rend cette tâche quelque peu difficile. Cependant, avec l'aide d'expressions de table communes (CTE), nous pouvons créer une solution efficace et intuitive.

La solution : utiliser un CTE

Un CTE nous permet pour définir et nommer un jeu de résultats temporaire. En tirant parti de la récursivité au sein d'un CTE, nous pouvons analyser de manière itérative la chaîne séparée par des virgules, en extrayant chaque valeur une par une.

La déclaration CTE dans notre cas ressemble à ceci :

WITH split(word, csv) AS (
  -- 'initial query' (see SQLite docs linked above)
  SELECT 
    '', 
    'Auto,A,1234444'||','
  
  -- 'recursive query'
  UNION ALL SELECT
    substr(csv, 0, instr(csv, ',')), 
    substr(csv, instr(csv, ',') + 1)
  FROM split
  WHERE csv != ''
)
Copier après la connexion

Dans la « requête initiale », nous créons un point de départ pour la partie récursive du CTE. Nous spécifions une chaîne vide pour « mot » et ajoutons une chaîne séparée par des virgules avec une virgule supplémentaire pour indiquer la fin du CSV.

La « requête récursive » est l'endroit où la magie opère. Il utilise la fonction instr() pour trouver la position de la première virgule dans le champ 'csv'. Ensuite, il divise le champ « csv » à l'aide de substr() en « mot » et la partie « csv » restante.

La récursivité est utilisée pour continuer à diviser la partie « csv » restante jusqu'à ce qu'il ne reste plus de virgules. , extrayant efficacement toutes les valeurs séparées par des virgules.

Récupération du fractionnement Valeurs

Une fois que le CTE a défini les valeurs fractionnées, nous pouvons les récupérer à l'aide d'une simple requête :

SELECT word FROM split 
WHERE word!='';
Copier après la connexion

La clause WHERE filtre les chaînes vides qui représentent l'initiale et valeurs terminales.

Résultat et avantages

Le résultat de la requête est le suivant suit :

Auto
A
1234444
Copier après la connexion

Cette approche offre plusieurs avantages :

  • Elle utilise un CTE récursif, qui est un moyen élégant et efficace de gérer la nature itérative du fractionnement.
  • Le résultat est facile à comprendre et à utiliser.
  • Il ne nécessite pas d'utiliser les fonctions Replace() et Trim(), qui peuvent être plus complexes et sujet aux erreurs.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal