Guest User

Untitled

a guest
Oct 23rd, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. CREATE FUNCTION [dbo].[SeparaConcatenaVarchar]
  2. (
  3. @string VARCHAR(MAX),
  4. @limit int,
  5. @separator char(1)
  6. )
  7. RETURNS VARCHAR(MAX)
  8. BEGIN
  9.  
  10.  
  11. declare @delimiter CHAR(1)=' ';
  12. declare @listSeparator TABLE(splitdata NVARCHAR(MAX),contador varchar(100),inicio int,fin int);
  13.  
  14. declare @valueToInsert varchar(50),@valueSplited varchar(50);
  15. DECLARE @start INT, @end INT
  16.  
  17. declare @total int;
  18. declare @totalRecorrido int;
  19. declare @residuo int;
  20.  
  21. SELECT @start = 1, @end = CHARINDEX(@delimiter, @string)
  22. WHILE @start < LEN(@string) + 1 BEGIN
  23. IF @end = 0
  24. SET @end = LEN(@string) + 1
  25.  
  26. set @valueSplited=SUBSTRING(@string, @start, @end - @start);
  27. set @total=len(@valueSplited)
  28. set @totalRecorrido=0
  29.  
  30. while @totalRecorrido<=@total/@limit
  31. begin
  32. declare @inicio int, @fin int;
  33. set @inicio=(@totalRecorrido*@limit)+1;
  34. set @fin=@limit;
  35.  
  36. if @totalRecorrido<@total/@limit and @totalRecorrido=0
  37. set @inicio=1;
  38.  
  39. if @totalRecorrido=(@total/@limit) and @total%@limit>0
  40. set @fin=(@total%@limit)+1;
  41.  
  42. set @valueToInsert=substring(@valueSplited,@inicio,@fin);
  43. INSERT INTO @listSeparator VALUES(@valueToInsert,@valueSplited,@inicio,@fin);
  44.  
  45. set @totalRecorrido=@totalRecorrido+1
  46. end
  47.  
  48. SET @start = @end + 1
  49. SET @end = CHARINDEX(@delimiter, @string, @start)
  50. end
  51. RETURN STUFF((SELECT @separator + splitdata FROM @listSeparator FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
  52. END
  53. GO
Add Comment
Please, Sign In to add comment