Hi @Kurian, Ranjith C SBOBNG-ITV/SER ,
Thank you so much for posting here.
You could try with one good split user defined function as below:
CREATE FUNCTION dbo.GetSplitString
(
@List VARCHAR(MAX),
@Delimiter VARCHAR(255),
@ElementNumber int
)
RETURNS VARCHAR(4000)
AS
BEGIN
DECLARE @result varchar(4000)
DECLARE @Items TABLE ( position int IDENTITY PRIMARY KEY,
Item VARCHAR(4000)
)
DECLARE @ll INT = LEN(@List) + 1, @ld INT = LEN(@Delimiter);
WITH a AS
(
SELECT
[start] = 1,
[end] = COALESCE(NULLIF(CHARINDEX(@Delimiter,
@List, @ld), 0), @ll),
[value] = SUBSTRING(@List, 1,
COALESCE(NULLIF(CHARINDEX(@Delimiter,
@List, @ld), 0), @ll) - 1)
UNION ALL
SELECT
[start] = CONVERT(INT, [end]) + @ld,
[end] = COALESCE(NULLIF(CHARINDEX(@Delimiter,
@List, [end] + @ld), 0), @ll),
[value] = SUBSTRING(@List, [end] + @ld,
COALESCE(NULLIF(CHARINDEX(@Delimiter,
@List, [end] + @ld), 0), @ll)-[end]-@ld)
FROM a
WHERE [end] < @ll
)
INSERT @Items SELECT [value]
FROM a
WHERE LEN([value]) > 0
OPTION (MAXRECURSION 0);
SELECT @result=Item
FROM @Items
WHERE position=@ElementNumber
RETURN @result;
END
GO
Then you could call this function as below:
declare @value varchar(1000)='apple\banana\lemon\kiwi\orange\coconut'
SELECT dbo.GetSplitString(@value,'\',1) level1
,dbo.GetSplitString(@value,'\',2) level2
,dbo.GetSplitString(@value,'\',3) level3
,dbo.GetSplitString(@value,'\',4) level4
,dbo.GetSplitString(@value,'\',5) level5
,dbo.GetSplitString(@value,'\',6) level6
Output:
level1 level2 level3 level4 level5 level6
apple banana lemon kiwi orange coconut
Or you could also have a dynamic way whatever how many '\' you have in the string as below:
declare @value varchar(1000)='apple\banana\lemon\kiwi\orange\coconut'
declare @n int=1
declare @num int
select @num =LEN(@value) - LEN(REPLACE(@value,'\',''))
declare @sql nvarchar(max)=''
declare @statement nvarchar(max)='SELECT '
WHILE ( @n <= @num+1)
BEGIN
SET @sql= 'dbo.GetSplitString('''+@value+''',''\'','+trim(cast(@n as char(2)))+') level'++trim(cast(@n as char(2)))+','
SET @n = @n + 1
SET @statement=@statement+@sql
END
SET @statement=SUBSTRING(@statement,1,len(@statement)-1)
EXECUTE sp_executesql @statement
Best regards
Melissa
If the answer is helpful, please click "Accept Answer" and upvote it.
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.
Hot issues November--What can I do if my transaction log is full?
Hot issues November--How to convert Profiler trace into a SQL Server table