十进制与二进制八进制十六进制之间的互相转换

xiaoxiao2021-02-28  126

啥也不说了,直接粘代码: --十进制转换二进制、八进制、十六进制 DECLARE @NUM INT=66;--在此输入十进制数字 DECLARE @type INT=2;--设置返回的进制类型 DECLARE @RESULT VARCHAR(500)=''; WITH CTE AS( SELECT @NUM/@type D,@NUM%@type S,1 [INDEX] UNION ALL SELECT D/@type , D%@type,[INDEX]+1 FROM CTE WHERE D>0 ) SELECT @RESULT+=CASE CAST(S AS VARCHAR(5)) WHEN '10' THEN 'A' WHEN '11' THEN 'B' WHEN '12' THEN 'C' WHEN '13' THEN 'D' WHEN '14' THEN 'E' WHEN '15' THEN 'F' ELSE CAST(S AS VARCHAR(5)) END FROM CTE ORDER BY [INDEX] DESC SELECT @RESULT --二进制、八进制、十六进制转换为十进制 DECLARE @INPUT VARCHAR(1000)='10010';--在此输入可识别的进制数字字符串 DECLARE @TYPE INT=2;--设置输入的进制类型 WITH CTE AS( SELECT CAST(CASE SUBSTRING(@INPUT,1,1) WHEN 'A' THEN '10' WHEN 'B' THEN '11' WHEN 'C' THEN '12' WHEN 'D' THEN '13' WHEN 'E' THEN '14' WHEN 'F' THEN '15' ELSE SUBSTRING(@INPUT,1,1) END AS int)*POWER(@TYPE,LEN(@INPUT)-1)NUM,1 [INDEX] UNION ALL SELECT CAST(CASE SUBSTRING(@INPUT,[INDEX]+1,1) WHEN 'A' THEN '10' WHEN 'B' THEN '11' WHEN 'C' THEN '12' WHEN 'D' THEN '13' WHEN 'E' THEN '14' WHEN 'F' THEN '15' ELSE SUBSTRING(@INPUT,[INDEX]+1,1) END AS int)*POWER(@TYPE,LEN(@INPUT)-[INDEX]-1),[INDEX]+1 NUM FROM CTE WHERE [INDEX]<LEN(@INPUT) )SELECT SUM(NUM) FROM CTE

本篇文章可以像屯干粮一样屯着,将来有用得着的时候可以先写成一个函数,方便快速使用

转载请注明原文地址: https://www.6miu.com/read-65663.html

最新回复(0)