CREATE FUNCTION dbo.Decode (@encodedId NVARCHAR(50))
RETURNS INT
AS
BEGIN
DECLARE @alphabet nvarchar(36) = 'abcdefghijklmnopqrstuvwxyz0123456789',
@base INT,
@decodedId INT = 0,
@len INT,
@pos INT = 1,
@letter NVARCHAR(10)
SET @len = LEN(@encodedId)
SET @base = LEN(@alphabet)
WHILE(@pos <= @len)
BEGIN
SET @letter = SUBSTRING(@encodedId, @pos, 1)
SET @decodedId = (@decodedId * @base) + CHARINDEX(@letter, @alphabet)
SET @pos += 1
END
RETURN @decodedId
END
GO
CREATE FUNCTION dbo.Encode (@id INT)
RETURNS NVARCHAR(50)
AS
BEGIN
DECLARE @alphabet nvarchar(36) = 'abcdefghijklmnopqrstuvwxyz0123456789',
@base int,
@pos int,
@result nvarchar(50) = '',
@encodedId nvarchar(50) = ''
SET @base = LEN(@alphabet)
IF(@id = 0)
BEGIN
SET @result = SUBSTRING(@alphabet, 1, 1)
END
ELSE
BEGIN
WHILE(@id > 0)
BEGIN
SET @pos = @id % @base
SET @encodedId += SUBSTRING(@alphabet, @pos, 1)
SET @id = @id / @base
END
SET @result = REVERSE(@encodedId)
END
RETURN @result
END
GO
Comments