sql server - SQL splitfunction reverse -


i trying make sql splitfunction works reverse. means input: 'test1,test2,test3,test4'

and output should be:

|  id  |  value  |   |  1   |  test4  |  |  2   |  test3  | |  3   |  test2  | |  4   |  test1  | 

i found forwardworking function don't know change make work reversed. have tried stuff doesn't work.

here original

create function [dbo].[splitstring] (  @inputstring varchar(8000),  @delimiter char(1)  ) returns table return (  split(startpos,endpos)  as(  select 0 startpos, charindex(@delimiter,@inputstring) endpos  union  select endpos+1, charindex(@delimiter,@inputstring,endpos+1)  split  endpos > 0  )  select 'id' = row_number() on (order (select 1)),  'value' = substring(@inputstring,startpos            ,coalesce(nullif(endpos,0)            ,len(@inputstring)+1)-startpos)  split ) go 

with

select id, value  dbo.splitstring('test1,test2,test3,test4', ','); 

you output.

select * [dbo].[udf-str-parse-8k-rev]('test1,test2,test3,test4',',') 

returns

retseq  retval 1       test4 2       test3 3       test2 4       test1 

the udf

create function [dbo].[udf-str-parse-8k-rev] (@string varchar(max),@delimiter varchar(25)) returns table  return (         cte1(n)   (select 1 (values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) n(n)),            cte2(n)   (select top (isnull(datalength(@string),0)) row_number() on (order (select null)) (select n=1 cte1 a,cte1 b,cte1 c,cte1 d) ),            cte3(n)   (select 1 union select t.n+datalength(@delimiter) cte2 t substring(@string,t.n,datalength(@delimiter)) = @delimiter),            cte4(n,l) (select s.n,isnull(nullif(charindex(@delimiter,@string,s.n),0)-s.n,8000) cte3 s)      select retseq = row_number() on (order a.n desc)           ,retval = ltrim(rtrim(substring(@string, a.n, a.l)))       cte4 ); --orginal source http://www.sqlservercentral.com/articles/tally+table/72993/ --select * [dbo].[udf-str-parse-8k-rev]('dog,cat,house,car',',') 

notice order in final select


Comments

Popular posts from this blog

inversion of control - Autofac named registration constructor injection -

verilog - Systemverilog dynamic casting issues -

ios - Change Storyboard View using Seague -