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

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

Barbara Streisand
Barbara Streisandoriginal
2025-01-04 11:43:35729parcourir

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

Diviser les valeurs délimitées dans une colonne SQL en plusieurs lignes

Les délimiteurs dans les colonnes SQL peuvent créer des défis lorsque vous tentez de diviser des valeurs en plusieurs rangées. Cet article fournit des solutions pour les versions récentes et anciennes de SQL Server.

SQL Server 2016 et plus récent

SQL Server 2016 introduit la fonction STRING_SPLIT, permettant de faciliter séparation des valeurs en utilisant ce qui suit syntaxe :

SELECT s.[message-id], f.value
FROM dbo.SourceData AS s
CROSS APPLY STRING_SPLIT(s.[recipient-address], ';') as f;

Versions SQL Server antérieures à 2016

Pour les anciennes versions de SQL Server, créez une fonction fractionnée telle que :

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

Une fois la fonction split créée, vous pouvez l'utiliser pour extraire valeurs :

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

Astuce :

Pour un stockage et un référencement optimaux, évitez d'utiliser des tirets dans les noms de colonnes, car ils nécessitent de les mettre entre crochets.

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!

Déclaration:
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