任何人都有URL缩短T-Sql代码?

时间:2010-02-21 23:58:47

标签: tsql url-shortener

我想将一些url和sql guids缩短成一些'简短'url格式。

是否有人有任何代码或链接到某些代码,以便在T-Sql中缩短网址?

2 个答案:

答案 0 :(得分:3)

我得到了答案:)

/我再次向谷歌提示他的帽子。

解释

  1. Base36 == a-z 0-9
  2. 这意味着,我想要一个缩短的网址。所以我将其插入数据库以获取唯一的身份号码。然后我将这个int / big int转换为base36字符串。

    链接我基于我的代码。

    1. Converting ints to base36
    2. Converting base36 to ints
    3. ...

      CREATE FUNCTION [dbo].[ConvertIntegerToBase36] 
      (
          @IntegerValue INTEGER
      )
      RETURNS VARCHAR(50)
      AS
      BEGIN
      
          DECLARE @Result VARCHAR(100) = '',
              @ShortCharacterSet VARCHAR(36) = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
      
          WHILE @IntegerValue > 0 BEGIN
              SET @Result = SUBSTRING(@ShortCharacterSet, @IntegerValue % LEN(@ShortCharacterSet) + 1, 1) + @Result;
              SET @IntegerValue = @IntegerValue / LEN(@ShortCharacterSet);
          END
      
          RETURN @Result
      END
      

      ...

      CREATE FUNCTION [dbo].[ConvertBase36ToInteger]
      (
          @EncodedValue VARCHAR(MAX)
      )
      RETURNS INT
      AS
      BEGIN
          -- Decoding encoded-strings to ints: http://dpatrickcaldwell.blogspot.com/2009/05/converting-hexadecimal-or-binary-to.html
      
          DECLARE @Result INTEGER = 0,
              @Index INTEGER = 0,
              @ShortCharacterSet VARCHAR(36) = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
      
          WHILE @Index < LEN(@EncodedValue)  
               SELECT @Result = @Result + POWER(LEN(@ShortCharacterSet), @Index) *   
                                (CHARINDEX  
                                   (SUBSTRING(@EncodedValue, LEN(@EncodedValue) - @Index, 1)  
                                   , @ShortCharacterSet) - 1  
                                ),  
                      @Index = @Index + 1;  
      
      
          RETURN @Result
      END 
      

      HTH。

答案 1 :(得分:1)

由于字符串操作是T-SQL不能很好地完成的,所以我将使用CLR存储过程。然后你可以使用任何.Net缩短功能。