Diviser les valeurs délimitées dans une colonne SQL en plusieurs lignes
Énoncé du problème :
Lors de l'insertion d'Exchange 2007 Message Tracking se connecte à une table SQL, les destinataires dans la colonne d'adresse du destinataire délimitée contiennent parfois plusieurs valeurs. L'utilisateur souhaite diviser ces valeurs en lignes distinctes dans une autre table tout en conservant l'association message-id d'origine.
Solution :
SQL Server 2016
Utilisation de la nouvelle fonction STRING_SPLIT :
SELECT s.[message-id], f.value FROM dbo.SourceData AS s CROSS APPLY STRING_SPLIT(s.[recipient-address], ';') as f;
SQL Server Pré-2016
Création d'une fonction de fractionnement personnalisée dbo.SplitStrings :
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);
Manipulation des données :
SELECT s.[message-id], f.Item FROM dbo.SourceData AS s CROSS APPLY dbo.SplitStrings(s.[recipient-address], ';') as f;
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!