Maison >base de données >tutoriel mysql >Comment diviser efficacement les valeurs délimitées d'une colonne SQL en plusieurs lignes ?
Diviser 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 :
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!