Advertisement
Guest User

Untitled

a guest
Dec 2nd, 2016
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.09 KB | None | 0 0
  1. -- =================================================
  2. -- Author: Theodore Brown
  3. -- Create date: 2016-12-02
  4. -- Description: Sort alphanumeric strings naturally!
  5. -- =================================================
  6. CREATE FUNCTION [dbo].[fnNaturalSort]
  7. (
  8. @string nvarchar(255)
  9. )
  10. RETURNS nvarchar(264)
  11. AS
  12. BEGIN
  13. DECLARE @sortString nvarchar(264);
  14. DECLARE @startIndex int, @endIndex int;
  15. DECLARE @afterStartIndex nvarchar(255);
  16. DECLARE @firstNum varchar(10); -- max length of int
  17.  
  18. SELECT @startIndex = PATINDEX('%[0-9]%', @string);
  19. SELECT @afterStartIndex = SUBSTRING(@string, @startIndex, LEN(@string));
  20. SELECT @endIndex = PATINDEX('%[^0-9]%', @afterStartIndex) - 1;
  21.  
  22. SELECT @firstNum =
  23. CASE
  24. WHEN @endIndex < 0 THEN @afterStartIndex -- rest of string after start index is number
  25. ELSE SUBSTRING(@afterStartIndex, 1, @endIndex)
  26. END;
  27.  
  28. SELECT @sortString =
  29. CASE
  30. WHEN LEN(@firstNum) = 0 THEN @string
  31. -- padd first number to 10 digits and replace it in the string
  32. ELSE STUFF(@string, @startIndex, LEN(@firstNum), REPLICATE('0', 10 - LEN(@firstNum)) + @firstNum)
  33. END;
  34.  
  35. RETURN @sortString;
  36. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement