Maison > base de données > tutoriel mysql > Comment diviser les adresses de destinataire délimitées dans SQL en plusieurs lignes ?

Comment diviser les adresses de destinataire délimitées dans SQL en plusieurs lignes ?

DDD
Libérer: 2024-12-31 19:18:11
original
634 Les gens l'ont consulté

How to Split Delimited Recipient Addresses in SQL into Multiple Rows?

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;
Copier après la connexion

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);
Copier après la connexion

Manipulation des données :

SELECT s.[message-id], f.Item
  FROM dbo.SourceData AS s
  CROSS APPLY dbo.SplitStrings(s.[recipient-address], ';') as f;
Copier après la connexion

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