3

いくつかの URL と SQL GUID をいくつかの「短い」URL 形式に短縮したいと考えています。

T-SqlでURLを短縮するためのコードやコードへのリンクはありますか?

4

2 に答える 2

3

私は私の答えを得ました:)

/me はまたもや Google に脱帽です。

定義

  1. Base36 == az 0-9

つまり、短縮された URL が必要です。だから私はそれをデータベースに挿入して、一意のID番号を取得します。次に、この int/big int を base36 文字列に変換します。

リンク 私は自分のコードを基にしています。

  1. int を base36 に変換します
  2. base36 を ints に変換しています

...

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。

于 2010-02-22T02:52:43.797 に答える
1

文字列操作は T-SQL ではうまく機能しないため、これには CLR ストアド プロシージャを使用します。次に、任意の .Net 短縮関数を使用できます。

于 2010-02-22T00:02:38.213 に答える