SQL Server十进制转二进制函数(支持正数正常转换 支持负数反码补码转换)
CREATE FUNCTION [dbo].[ConvertBinary]
(
@Dec INT,-- 参数1:十进制数字
@StrLen INT--参数2:输出的二进制长度 正数转为二进制字符串最多31位
)
RETURNS VARCHAR(31)
AS
BEGIN
DECLARE @BinStr AS VARCHAR(31) -- 二进制表示的字符串
DECLARE @Div2 AS INT -- 商
DECLARE @Mod2 AS INT -- 模/余数
DECLARE @PDec INT=@Dec --赋值 方便后续判断正负数
SET @Div2 = ABS(@Dec) / 2
SET @Mod2 = ABS(@Dec) % 2
SET @BinStr = ''
WHILE @Div2 <> 0
BEGIN
SET @BinStr = CAST(@Mod2 AS CHAR(1)) + @BinStr
SET @Dec = ABS(@Dec) / 2
SET @Div2 = ABS(@Dec) / 2
SET @Mod2 = ABS(@Dec) % 2
END;
SET @BinStr = CAST(@Mod2 AS CHAR(1)) + @BinStr -- 至此,已完成十进制到二进制的转换
IF @StrLen > LEN(@BinStr) -- 如果用户指定的长度大于实际长度,则需要左边补0
BEGIN
IF @StrLen > 31 -- 返回的长度,最长为32
SET @StrLen = 31
DECLARE @ZeroStr VARCHAR(31) -- 需要补充的"0000..."
DECLARE @OffsetLen TINYINT -- 需要补充几个"0"
SET @ZeroStr = ''
SET @OffsetLen = @StrLen - LEN(@BinStr)
WHILE @OffsetLen > 0
BEGIN
SET @ZeroStr = @ZeroStr + '0'
SET @OffsetLen = @OffsetLen - 1
END
SET @BinStr = @ZeroStr + @BinStr
END
IF @PDec < 0 --当参数1 为负数时 进行反码 补码操作
BEGIN
--反码操作 先把1转成A,把0转成B 然后把A转成0,把B转成1
SET @BinStr=REPLACE(REPLACE(@BinStr,'1','A'),'0','B')
SET @BinStr=REPLACE(REPLACE(@BinStr,'A','0'),'B','1')
DECLARE @IntBL INT
DECLARE @XHBinStr NVARCHAR(50)=@BinStr--赋值 方便后续根据字符循环
--补码操作
WHILE len(@XHBinStr)>0
BEGIN
SET @IntBL =CAST(RIGHT(@XHBinStr, 1) AS INT)
IF @IntBL=1
BEGIN
declare @Str1 nvarchar(100)='0' --修改字符
declare @i1 int=LEN(@XHBinStr) --第几位
SET @BinStr=left(@BinStr,@i1-1)+ @Str1+right(@BinStr,len(@BinStr)-@i1)--补位操作 0替换为1
END
IF @IntBL=0
BEGIN
declare @Str nvarchar(100)='1' --修改字符
declare @i int=LEN(@XHBinStr) --第几位
SET @BinStr=left(@BinStr,@i-1)+ @Str+right(@BinStr,len(@BinStr)-@i)--补位操作 0替换为1
BREAK--结束循环
END
SET @XHBinStr = LEFT(@BinStr, LEN(@XHBinStr) - 1)
END
END
RETURN @BinStr--返回值
END
GO
--调用案例
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库