Maison >base de données >tutoriel mysql >Comment puis-je diviser les valeurs délimitées d'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 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;
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;
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!