Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Konversi multi-basis - menggunakan semua kombinasi untuk penyingkat URL

Saya berhasil melakukan konversi. Hal yang rumit adalah bahwa ini bukan hanya konversi basis campuran, basis yang lebih tinggi dari karakter pertama juga memengaruhi nilai kode yang lebih panjang.

Saya mulai dengan kasus yang lebih mudah; kode dasar-10. Saya melihat bahwa rentang dua digit memiliki 10 kode tambahan, rentang tiga digit memiliki 100 kode tambahan, dan seterusnya:

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

Jadi, nilai karakter pertama dalam kode tidak hanya basis yang dinaikkan ke posisi, tetapi juga memiliki offset.

Setelah menerapkan ini ke pengkodean base-62, inilah yang saya dapatkan:

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. SQL Query - Ubah format tanggal dalam kueri menjadi DD/MM/YYYY

  2. Bagaimana cara mengimpor file data sql ke SQL Server?

  3. Perbaiki SQL Database Recovery Pending Access Masalah Ditolak

  4. Bagaimana saya harus memasukkan banyak catatan?

  5. Prosedur tersimpan dijalankan dengan indeks yang berbeda saat dipanggil melalui Entity Framework dibandingkan dengan SSMS