10進位轉33進位

来源:http://www.cnblogs.com/wghao/archive/2017/02/09/6381865.html
-Advertisement-
Play Games

1,開始 昨天在CSDN上看到這一個提問帖子:《用SQL寫一個存儲過程10進位轉33進位代碼 》,原帖的問題是這樣: 急求10進位轉33進位代碼。 就是我想在SQL中創建一個存儲過程“T10TO33”可以實現將10進位的數據轉換成33進位。 33進位規則是:1,2,3,4,5,6,7,8,9,A,B ...


1,開始

 昨天在CSDN上看到這一個提問帖子:《用SQL寫一個存儲過程10進位轉33進位代碼 》,原帖的問題是這樣:

急求10進位轉33進位代碼。
 就是我想在SQL中創建一個存儲過程“T10TO33”可以實現將10進位的數據轉換成33進位。
33進位規則是:1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,V,W,X,Y,Z,0
字母:I、O、U不用,其餘正常流水,哪位大神幫忙寫一個,謝謝

 

2.分析

不同進位數據間的轉換,記得很久之前寫過類似的,參加《X進位與10進位之間的轉換》,基本的演算法是相同的。

在這裡的要求,進位轉換中,26個字母中需排除I,O,U三個字母不用,那麼原來的X進位與10進位之間轉換方法中,就不能直接使用Char()函數。需要對用到的數字和字母重新作個排序,再定位轉換。

  2.1.初始化一個表變數@tb_tmp,內容如下:

  

  

declare @tb_tmp as table(id int identity(0,1) primary key,radix char(1))
;with cte as (select top (36) row_number() over(order by getdate())-1 as id from sys.columns)
    insert into @tb_tmp(radix)
    select case when id>9 then char(55+id) else rtrim(id) end as radix from cte where char(55+id) not in ('I','O','U') 

 

  2.2 假設一個10進位的變數@input_int  int=50,迴圈對@input_int除33取模(@input_int%33),得到的模,拿到2.1中的@tb_tmp匹配id,定位到對應的基數radix.即對應到33進位數據位。把得到radix寫入變數@output ( @output =  找到的radix + @output)。每次迴圈,@input_int=@input_int/33,實現10進位拆分。當@input_int=0時,退出迴圈,返回@output,作為10進位到33進位的結果值。

  

set @output=''
while(1=1)
begin   
    select @output=Convert(nvarchar(1024),Case (@input_int%33) when 0 then rtrim(@input_int%33) else (select radix from @tb_tmp where id=@input_int%33) end+@output),@input_int=@input_int/33
    if @input_int=0 break
end

 

3.完整代碼:

if object_id('T10TO33') Is not null
    Drop Proc T10TO33
Go
create procedure T10TO33(
@input_int int,
@output nvarchar(1024) output
)
as
set nocount on
declare @tb_tmp as table(id int identity(0,1) primary key,radix char(1))
;with cte as (select top (36) row_number() over(order by getdate())-1 as id from sys.columns)
    insert into @tb_tmp(radix)
    select case when id>9 then char(55+id) else rtrim(id) end as radix from cte where char(55+id) not in ('I','O','U') 
set @output=''
while(1=1)
begin   
    select @output=Convert(nvarchar(1024),Case (@input_int%33) when 0 then rtrim(@input_int%33) else (select radix from @tb_tmp where id=@input_int%33) end+@output),@input_int=@input_int/33
    if @input_int=0 break
end
go

 

4.測試:

declare @reuslt nvarchar(1024)

exec T10TO33 0,@reuslt output
print @reuslt --0

exec T10TO33 7,@reuslt output
print @reuslt --7
 
exec T10TO33 32,@reuslt output
print @reuslt --Z
 
exec T10TO33 33,@reuslt output
print @reuslt --10
 
exec T10TO33 34,@reuslt output
print @reuslt --11

exec T10TO33 50,@reuslt output
print @reuslt --1H
 
exec T10TO33 99,@reuslt output
print @reuslt --30
 
exec T10TO33 100,@reuslt output
print @reuslt --31

(完)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 遇到1000萬數據表 最近遇到一個問題,就是單表數據過1000萬的存儲及查詢問題。舉個例子:1000萬的數據存在一個表中,欄位4 5個樣子,日常 開發中難免要做過濾、排序、分頁。如果把這幾個放在一起即要過濾又要排序,還要分頁那麼數據量大一些就會發現特別慢。 10多年前剛入行時就聽許多的人討論分頁,說 ...
  • 為了保證資料庫中的業務數據不被非授權的用戶非法竊取,需要對資料庫的訪問者進行各種限制,而資料庫安全性控制措施主要有這三種,第一種用戶身份鑒別,手段可以是口令,磁卡,指紋等技術,只有擁有合法身份的人才可以進入資料庫。第二種存取許可權控制,不同角色,對資料庫的存取許可權是不同的,必須為每一個角色設置其訪問的... ...
  • 1.準備安裝源 下載地址: "https://www.postgresql.org/ftp/source/" 下載並解壓。 2.軟體編譯安裝 配置、檢查安裝環境 成功後,方可進入下一步。遇到問題參考 "[configure遇到的問題]" 編譯安裝 3.配置資料庫 內核參數配置 用戶配置 初始化資料庫 ...
  • USE [master] GO /****** Object: StoredProcedure [dbo].[p_comparestructure] Script Date: 02/09/2017 15:39:59 ******/ SET ANSI_NULLS ON GO SET QUOTED_ID... ...
  • 轉載地址:http://lobert.iteye.com/blog/1955841 前些天拿到一個表,將近有4000w數據,沒有任何索引,主鍵。(建這表的絕對是個人才) 這是一個日誌表,記錄了游戲中物品的產出與消耗,原先有一個後臺對這個表進行統計。。。。。(這要用超級電腦才能統計得出來吧),只能幫 ...
  • 在一個測試伺服器刪除發佈(Publication)時遇到下麵錯誤,具體如下所示 標題: Microsoft SQL Server Management Studio ------------------------------ Could not delete publication 'RPL_GE... ...
  • 磁碟問題定位基本流程: 磁碟的壓力分析,主要使用下麵幾個性能計數器 (針對單獨的物理盤,每個物理磁碟都會有一組): Avg. Disk Read Queue Length 讀隊列(越小越好,理想值 2 以下,隊列越高說明一個操作的響應時間越長) Avg. Disk Write Queue Lengt ...
  • 面向對象(Object Oriented,OO)。 起初,“面向對象”是指在程式設計中採用封裝、繼承、多態等設計方法。現在,面向對象的思想已經涉及到軟體開發的各個方面。如,面向對象的分析(OOA,ObjectOriented Analysis),面向對象的設計(OOD,Object Oriented ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...