Advertisement
Guest User

Untitled

a guest
Jun 7th, 2011
392
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.25 KB | None | 0 0
  1. CREATE FUNCTION dbo.fnSplit
  2. (
  3. @Expression NVARCHAR(max)
  4. , @Delimiter NVARCHAR(max)
  5. , @INDEX INT
  6. )
  7. RETURNS NVARCHAR(max)
  8. AS
  9. BEGIN
  10. DECLARE @RETURN NVARCHAR(max)
  11. DECLARE @Pos INT
  12. DECLARE @PrevPos INT
  13. DECLARE @I INT
  14.  
  15. -- SELECT dbo.fnSplit('4.55.108.2','.', 2)
  16.  
  17. IF @Expression IS NULL OR @Delimiter IS NULL OR LEN(@Delimiter) = 0 OR @INDEX < 1
  18. SET @RETURN = NULL
  19. ELSE IF @INDEX = 1 BEGIN
  20. SET @Pos = CHARINDEX(@Delimiter, @Expression, 1)
  21. IF @Pos > 0 SET @RETURN = LEFT(@Expression, @Pos - 1)
  22. END ELSE BEGIN
  23. SET @Pos = 0
  24. SET @I = 0
  25.  
  26. WHILE (@Pos > 0 AND @I < @INDEX) OR @I = 0 BEGIN
  27. SET @PrevPos = @Pos
  28. SET @Pos = CHARINDEX(@Delimiter, @Expression, @Pos + LEN(@Delimiter))
  29.  
  30. SET @I = @I + 1
  31. END
  32.  
  33. IF @Pos = 0 AND @I = @INDEX
  34. SET @RETURN = SUBSTRING(@Expression, @PrevPos + LEN(@Delimiter), LEN(@Expression))
  35. ELSE IF @Pos = 0 AND @I <> @INDEX
  36. SET @RETURN = NULL
  37. ELSE
  38. SET @RETURN = SUBSTRING(@Expression, @PrevPos + LEN(@Delimiter), @Pos - @PrevPos - LEN(@Delimiter))
  39. END
  40.  
  41. RETURN @RETURN
  42. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement