A user defined function to return a table af tokens from a delimited string.
Uses text variable so string can be of unlimited length, performs better than a list of xml elements.
Now supports returning of tokens by position
A user defined function to return a table af tokens from a delimited string.
Uses text variable so string can be of unlimited length, performs better than a list of xml elements.
Now supports returning of tokens by position
IF EXISTS (SELECT 1 FROM sysobjects WHERE name='SplitTokenStringPositions') DROP FUNCTION dbo.SplitTokenStringPositions GO CREATE FUNCTION dbo.SplitTokenStringPositions ( /******************************************************************************* Written By : Simon Sabin Date : 12 October 2002 Description : Returns the start and length of the tokens in a string History Date Change ------------------------------------------------------------------------------ 12/10/2002 Created 15/10/2002 Fixed bug with spliting and enhanced to allow for return of positions *******************************************************************************/ @TokenString text ,@Delimiter varchar(100) ) RETURNS @tab TABLE (position smallint, start smallint, length smallint) AS BEGIN DECLARE @Index smallint, @Start smallint, @DelimiterSize smallint, @Finish bit, @Position smallint SET @DelimiterSize= LEN(@Delimiter) SET @Start = 1 SET @Index = 1 SET @Finish = 0 SET @Position =1 WHILE @Finish = 0 BEGIN SET @Index = CHARINDEX(@Delimiter, @TokenString,@Start) IF @Index = 0 BEGIN SET @Index = DATALENGTH(@TokenString) + 1 SET @Finish = 1 END INSERT INTO @tab VALUES(@position, @Start ,@Index - @Start) SET @Start = @Index + @DelimiterSize SET @Position = @Position + 1 END RETURN END GO IF exists (SELECT * from dbo.sysobjects WHERE id = object_id(N'[dbo].[SplitTokenString]') ) DROP FUNCTION [dbo].[SplitTokenString] GO CREATE FUNCTION dbo.SplitTokenString ( /******************************************************************************* Written By : Simon Sabin Date : 12 October 2002 Description : Splits a token string into its tokens Uses another function to obtain the start and end positions of each token History Date Change ------------------------------------------------------------------------------ 12/10/2002 Created *******************************************************************************/ @TokenString text, @Delimitervarchar(100) ) RETURNS TABLE AS RETURN ( SELECT position, SUBSTRING(@TokenString, Start ,Length) "token" FROM dbo.SplitTokenStringPositions(@TokenString ,@Delimiter)) GO