sql >> Database teknologi >  >> RDS >> Sqlserver

Multi-base konvertering - bruger alle kombinationer til URL shortener

Det lykkedes mig at lave konverteringen. Det vanskelige er, at det ikke kun er en blandet basekonvertering, den højere base af det første tegn påvirker også værdierne af længere koder.

Jeg startede med en lettere sag; base-10 koder. Jeg så, at det tocifrede område har 10 ekstra koder, det trecifrede område har 100 ekstra koder og så videre:

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

Så værdien af ​​det første tegn i koden er ikke kun basen hævet til positionen, men den har også en offset.

Efter at have anvendt dette på base-62-kodningen, er dette, hvad jeg endte med:

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. SQL Server-fejl ved opdateringskommando - Der opstod en alvorlig fejl på den aktuelle kommando

  2. Hvordan indsætter/opdaterer man større datastørrelser i Oracle-tabellerne?

  3. Fjern duplikerede rækker i en PostgreSQL SELECT-sætning

  4. Udførelse af en Oracle Stored Proc som en anden bruger