


Comment diviser efficacement les valeurs délimitées d'une colonne SQL en plusieurs lignes ?
Jan 01, 2025 pm 12:47 PMDiviser les valeurs délimitées d'une colonne SQL en plusieurs lignes
Lorsque vous traitez des tables contenant des valeurs délimitées dans une seule colonne, comme un destinataire -champ d'adresse séparé par des points-virgules (;), il devient nécessaire de diviser ces valeurs en plusieurs lignes pour un traitement ou une analyse ultérieur. Cet article explore différentes méthodes pour y parvenir à l'aide de SQL, en se concentrant particulièrement sur l'optimisation des performances et de l'efficacité.
Utilisation de la fonction STRING_SPLIT pour SQL Server 2016
Si vous utilisez SQL Server 2016 ou version ultérieure, vous pouvez exploiter la fonction STRING_SPLIT pour diviser efficacement les valeurs délimitées. La syntaxe de cette fonction est la suivante :
STRING_SPLIT(@list, @delimiter)
Voici comment utiliser STRING_SPLIT pour extraire les adresses des destinataires dans des lignes séparées :
SELECT [message-id], value FROM dbo.SourceData CROSS APPLY STRING_SPLIT([recipient-address], ';') AS f;
Création d'une fonction de fractionnement pour Pre -Versions SQL Server 2016
Pour les versions SQL Server antérieures à 2016, vous pouvez créer une fonction de partage personnalisée. Un exemple d'une telle fonction est :
CREATE FUNCTION dbo.SplitStrings( @List NVARCHAR(MAX), @Delimiter NVARCHAR(255) ) RETURNS TABLE AS RETURN (SELECT Number = ROW_NUMBER() OVER (ORDER BY Number), Item FROM (SELECT Number, Item = LTRIM(RTRIM(SUBSTRING(@List, Number, CHARINDEX(@Delimiter, @List + @Delimiter, Number) - Number))) FROM (SELECT ROW_NUMBER() OVER (ORDER BY s1.[object_id]) FROM sys.all_objects AS s1 CROSS APPLY sys.all_objects) AS n(Number) WHERE Number <= CONVERT(INT, LEN(@List)) AND SUBSTRING(@Delimiter + @List, Number, 1) = @Delimiter ) AS y); GO
Vous pouvez ensuite utiliser cette fonction pour diviser les valeurs délimitées comme suit :
SELECT [message-id], f.Item FROM dbo.SourceData CROSS APPLY dbo.SplitStrings([recipient-address], ';') AS f;
Optimisation et considérations
Pour garantir des performances optimales, tenez compte des conseils suivants :
- Utilisez la méthode appropriée en fonction de votre serveur SQL version.
- Évitez d'utiliser l'opérateur LIKE pour rechercher des délimiteurs, car cela peut être inefficace.
- Indexez la colonne d'adresse du destinataire pour des recherches plus rapides.
- Divisez les grands ensembles de données en des morceaux plus petits pour le traitement.
- Utilisez les mécanismes d'insertion en masse de SQL Server pour importer efficacement des données dans le base de données.
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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Réduisez l'utilisation de la mémoire MySQL dans Docker

Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE?

Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée

Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin)

Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape

Comment sécuriser MySQL contre les vulnérabilités communes (injection SQL, attaques par force brute)?

Comment configurer le cryptage SSL / TLS pour les connexions MySQL?
