Diviser les valeurs délimitées d'une colonne SQL en plusieurs lignes
Dans les situations où une colonne SQL contient des données délimitées, il peut être nécessaire d'extraire et formatez les valeurs sur plusieurs lignes. Cette tâche devient particulièrement difficile lorsqu'il s'agit de gros volumes de données ou de chaînes délimitées extrêmement longues.
Considérons l'exemple suivant :
Table source
message-id | recipient-address |
---|---|
[email protected] | [email protected] |
[email protected] | [email protected] |
[email protected] | [email protected];[email protected];[email protected] |
Sortie souhaitée
message-id | recipient-address |
---|---|
[email protected] | [email protected] |
[email protected] | [email protected] |
[email protected] | [email protected] |
[email protected] | [email protected] |
[email protected] | [email protected] |
Pour les versions SQL Server 2016 et versions ultérieures, la fonction STRING_SPLIT fournit une solution simple :
SELECT s.[message-id], f.value FROM dbo.SourceData AS s CROSS APPLY STRING_SPLIT(s.[recipient-address], ';') AS f;
Avant SQL Server 2016, une fonction de fractionnement personnalisée peut être créée :
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
Avec la fonction de fractionnement en place , les données peuvent être extraites et formatées :
SELECT s.[message-id], f.Item FROM dbo.SourceData AS s CROSS APPLY dbo.SplitStrings(s.[recipient-address], ';') AS f;
En tirant parti de ces techniques, il est possible de diviser efficacement valeurs délimitées en plusieurs lignes, simplifiant les tâches de formatage et d'analyse des 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!