SQL Split String
Spesso mi è capitato di dover effettuare uno split di una stringa in sql.
Dato che non esiste una funzione di sistema per effettuare lo split bisogna creare una User Defined Function che restituisce una tabella con gli elementi risultanti dallo split.
La UDF in SQL per lo split di una stringa è definita di seguito:
USE [Northwind] GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SplitString]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT')) DROP FUNCTION [dbo].[SplitString] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION [dbo].[SplitString](@StringToSplit nvarchar (4000), @Separ nvarchar (10)) RETURNS @ValueTable TABLE ([Elem] nvarchar(4000)) BEGIN DECLARE @NextString nvarchar(4000) DECLARE @Pos int DECLARE @NextPos int DECLARE @CommaCheck nvarchar(1) --Inizialize SET @NextString = '' SET @CommaCheck = right(@StringToSplit,1) SET @StringToSplit = @StringToSplit + @Separ --Get the position of the first @Separ SET @Pos = CHARINDEX(@Separ,@StringToSplit) SET @NextPos = 1 --Loop while there is still a comma in the String of levels WHILE (@pos <> 0) BEGIN SET @NextString = RTRIM(LTRIM(SUBSTRING(@StringToSplit,1,@Pos - 1))) IF(@NextString <> '') BEGIN INSERT INTO @ValueTable ([Elem]) Values (@NextString) END SET @StringToSplit = SUBSTRING(@StringToSplit,@pos +1,len(@StringToSplit)) SET @NextPos = @Pos SET @pos = CHARINDEX(@Separ,@StringToSplit) END RETURN END GO SELECT * from [dbo].[SplitString]('Test;split;string;', ';')
Il risultato della select in coda allo script è il seguente:
Download source split_string_sql.zip (736,00 bytes)
Lascia un commento