Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Chuyển đổi nhiều cơ sở - sử dụng tất cả các kết hợp cho trình rút ngắn URL

Tôi đã quản lý để thực hiện chuyển đổi. Điều khó khăn là nó không chỉ là một chuyển đổi cơ sở hỗn hợp, cơ sở cao hơn của ký tự đầu tiên cũng ảnh hưởng đến giá trị của các mã dài hơn.

Tôi bắt đầu với một trường hợp dễ dàng hơn; mã cơ số 10. Tôi thấy rằng phạm vi hai chữ số có 10 mã phụ, phạm vi ba chữ số có 100 mã phụ, v.v.:

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

Vì vậy, giá trị của ký tự đầu tiên trong mã không chỉ là cơ sở được nâng lên vị trí, mà nó còn có một phần bù.

Sau khi áp dụng điều này cho mã hóa base-62, đây là kết quả của tôi:

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. Thay đổi kích thước hình ảnh từ 150 * 150 thành 70 * 70 bằng cách sử dụng truy vấn sql?

  2. Sự khác biệt giữa Equi-Join và Inner-Join trong SQL

  3. Truy xuất tên cột và kiểu của một thủ tục được lưu trữ?

  4. Ràng buộc khóa ngoại có thể gây ra chu kỳ hoặc nhiều đường dẫn tầng?

  5. Suy nghĩ về phiên bản SQL Server 2019