Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Преобразуване с няколко бази - използване на всички комбинации за съкращаване на URL адреси

Успях да направя преобразуването. Трудното е, че това не е просто преобразуване със смесена основа, по-високата основа на първия знак също влияе върху стойностите на по-дългите кодове.

Започнах с по-лесен случай; базови 10 кодове. Видях, че двуцифреният диапазон има 10 допълнителни кода, трицифреният диапазон има 100 допълнителни кода и т.н.:

0 - 9        : '0' - '9'
10 - 109     : '00' - '99'
110 - 1109   : '000' - '999'
1110 - 11109 : '0000' - '9999'

И така, стойността на първия знак в кода не е само основата, повдигната до позицията, но има и отместване.

След като приложих това към кодирането base-62, ето какво получих:

create function tiny_Encode(@UrlId int) returns varchar(10)
as
begin

  declare
    @Chars varchar(62),
    @Code varchar(10),
    @Value int,
    @Adder int

  set @Chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
  if (@UrlId < 63) begin
    set @Code = substring(@Chars, @UrlId, 1)
  end else begin
    set @UrlId = @UrlId - 1
    set @Value = 62
    set @Adder = 0
    while (@UrlId >= @Value * 63 + @Adder) begin
      set @Adder = @Adder + @Value
      set @Value = @Value * 62
    end
    set @Code = substring(@Chars, (@UrlId - @Adder) / @Value, 1)
    set @UrlId = ((@UrlId - @Adder) % @Value)
    while (@Value > 1) begin
      set @Value = @Value / 62
      set @Code = @Code + substring(@Chars, @UrlId / @Value + 1, 1)
      set @UrlId = @UrlId % @Value
    end
  end
  return @Code

end



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да актуализирам част от низа с помощта на функцията за замяна в tsql?

  2. Заявките FREETEXT в SQL Server 2008 не съвпадат по фраза

  3. Внедряване на обработка на грешки и транзакции в SQL Server

  4. Незадължителен параметър в SQL сървър

  5. UNIX_TIMESTAMP в SQL Server