如何在SQL Server中简洁实现十进制整数转十二进制?
在SQL Server中将INT十进制转换为十二进制的简洁方法
SQL Server没有内置的十二进制转换函数,但可以通过自定义函数或递归查询实现简洁转换,以下是两种实用方案:
方案一:自定义标量函数
通过循环取余+整除逻辑生成十二进制字符串,用A代表10、B代表11(可按需改为小写a/b):
CREATE FUNCTION dbo.DecimalToDuodecimal(@Decimal INT) RETURNS VARCHAR(20) AS BEGIN DECLARE @Result VARCHAR(20) = '' DECLARE @Remainder INT DECLARE @Chars CHAR(12) = '0123456789AB' IF @Decimal = 0 RETURN '0' WHILE @Decimal > 0 BEGIN SET @Remainder = @Decimal % 12 SET @Result = SUBSTRING(@Chars, @Remainder + 1, 1) + @Result SET @Decimal = @Decimal / 12 END RETURN @Result END
使用示例
SELECT dbo.DecimalToDuodecimal(12) AS Duodecimal -- 输出 10 SELECT dbo.DecimalToDuodecimal(23) AS Duodecimal -- 输出 1B SELECT dbo.DecimalToDuodecimal(0) AS Duodecimal -- 输出 0
方案二:递归CTE(无需创建函数)
用递归CTE一次性完成转换,适合临时场景:
DECLARE @Decimal INT = 23; WITH DuodecimalCTE AS ( SELECT @Decimal AS Num, CAST(SUBSTRING('0123456789AB', (@Decimal % 12) + 1, 1) AS VARCHAR(20)) AS Result WHERE @Decimal > 0 UNION ALL SELECT Num / 12, CAST(SUBSTRING('0123456789AB', (Num % 12) + 1, 1) + Result AS VARCHAR(20)) FROM DuodecimalCTE WHERE Num / 12 > 0 ) SELECT COALESCE(MAX(Result), '0') AS Duodecimal FROM DuodecimalCTE;
内容的提问来源于stack exchange,提问作者Rieux
相关产品推荐
相关产品推荐

