Maison > base de données > tutoriel mysql > Comment diviser les valeurs délimitées d'une colonne SQL en plusieurs lignes ?

Comment diviser les valeurs délimitées d'une colonne SQL en plusieurs lignes ?

Patricia Arquette
Libérer: 2025-01-03 18:33:43
original
315 Les gens l'ont consulté

How to Split Delimited Values in a SQL Column into Multiple Rows?

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

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

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

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal