啥也不说了,直接粘代码:
--十进制转换二进制、八进制、十六进制
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
本篇文章可以像屯干粮一样屯着,将来有用得着的时候可以先写成一个函数,方便快速使用