UFN_PARSE_STRING
Parses the string with provided delimiter
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@string | varchar(max) | IN | |
@delimiter | varchar(3) | IN |
Definition
Copy
CREATE function dbo.UFN_PARSE_STRING
(
@string varchar(max),
@delimiter varchar(3)
)
RETURNS @isp_parse_string TABLE
(
element_id int NOT NULL IDENTITY(1,1),
element_value varchar(250)
)
AS
BEGIN
DECLARE @end_pos int
DECLARE @delimiter_length int
DECLARE @err_msg varchar(250)
SELECT @delimiter_length = DATALENGTH(@delimiter)
SELECT @string = LTRIM(RTRIM(@string))
-------------------------------------------------
-- Remove trailing, leading delimiters
-------------------------------------------------
WHILE SUBSTRING(LTRIM(RTRIM(@string)), DATALENGTH(LTRIM(RTRIM(@string))) -@delimiter_length + 1, @delimiter_length) = @delimiter
BEGIN
SELECT @string = SUBSTRING(LTRIM(RTRIM(@string)), 1,DATALENGTH(LTRIM(RTRIM(@string))) - @delimiter_length)
END
WHILE SUBSTRING(@string, 1, @delimiter_length) = @delimiter
BEGIN
SELECT @string = SUBSTRING(@string, @delimiter_length + 1, DATALENGTH(@string) - @delimiter_length)
END
-------------------------------------------------
-- Move through string and store values in temp table
-------------------------------------------------
SELECT @end_pos = CHARINDEX(@delimiter, @string)
WHILE @end_pos <> 0 AND DATALENGTH(@string) > @delimiter_length
BEGIN
IF @end_pos <> 1
BEGIN
INSERT INTO @isp_parse_string (element_value)
VALUES(SUBSTRING(@string, 1, @end_pos - 1))
END
SELECT @string = SUBSTRING(@string, @end_pos + @delimiter_length, DATALENGTH(@string) - @end_pos + @delimiter_length - 1)
SELECT @string = LTRIM(RTRIM(@string))
SELECT @end_pos = CHARINDEX(@delimiter, @string)
END
-------------------------------------------------
-- Insert last value left and return list to caller
-------------------------------------------------
IF @string <> ''
BEGIN
INSERT INTO @isp_parse_string(element_value) VALUES(@string)
END
RETURN
END