declare @s varchar(2000) set @s = 'Hello World SQL DBAs' select * from dbo.SplitString(@s, ' '); gowill return
| index | value |
|---|---|
| 0 | Hello |
| 1 | World |
| 2 | SQL |
| 3 | DBAs |
Function definition using recursive query via Common Table Expression and Union All:
CREATE function [dbo].[SplitString]
(
@str nvarchar(4000),
@separator char(1)
)
returns table
AS
return (
with tokens(p, a, b) AS
(
select 1, 1, charindex(@separator, @str)
union all
select p + 1, b + 1, charindex(@separator, @str, b + 1)
from tokens /* Recursive use of common table expression */
where b > 0
)
select
p-1 as [index]
,substring(@str, a, case when b > 0 then b-a ELSE 4000 end) AS [value]
from tokens
)
No comments:
Post a Comment