У кого-нибудь есть URL, сокращающий код T-Sql? - PullRequest
3 голосов
/ 22 февраля 2010

Я хочу сократить некоторые URL и направляющие sql в некоторый «короткий» формат URL.

Есть ли у кого-нибудь код или ссылки на какой-либо код для сокращения URL в T-Sql?

Ответы [ 2 ]

3 голосов
/ 22 февраля 2010

Я получил свой ответ:)

/ мне подсказывает гугл, но еще раз.

Определения

  1. Base36 == a-z 0-9

это значит, я хочу сокращенный URL. поэтому я вставляю его в БД, чтобы получить уникальный идентификационный номер. Затем я конвертирую этот int / big int в строку base36.

Ссылки Я основал свой код на отключении.

  1. Преобразование целых в базу 36 .
  2. Преобразование base36 в целые числа .

...

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 

НТН.

1 голос
/ 22 февраля 2010

Так как манипулирование строками - это то, что T-SQL не делает так хорошо, для этого я бы использовал хранимую процедуру CLR. Тогда вы можете использовать любую функцию сокращения .Net.

...