sql Server如何编写函数实现把十进制数转换为二进制数?求大神相助!!

如题所述

创建函数

create FUNCTION [dbo].[Dec2Bin](@Dec INT, @StrLen INT)
RETURNS VARCHAR(31) -- INT型,4字节,正数转为二进制字符串最多31位
AS
BEGIN
    DECLARE @BinStr AS VARCHAR(31)      -- äºŒè¿›åˆ¶è¡¨ç¤ºçš„字符串
    DECLARE @Div2 AS INT                -- å•†
    DECLARE @Mod2 AS INT                -- æ¨¡/余数
    IF @Dec < 0
        RETURN 'NULL'              -- ä¸æ”¯æŒè´Ÿæ•°çš„转换
    SET @Div2 = @Dec / 2 
    SET @Mod2 = @Dec % 2 
    SET @BinStr = ''
    WHILE @Div2 <> 0
    BEGIN
        SET @BinStr = CAST(@Mod2 AS CHAR(1)) + @BinStr
        SET @Dec = @Dec / 2
        SET @Div2 = @Dec / 2
        SET @Mod2 = @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
    RETURN @BinStr
END

调用函数

select [dbo].[Dec2Bin](3,8)

其中3是要转换的数字,8是最后二进制的长度,不足位的前补0

追问

谢谢你,大神,成功了,弱弱问一句,有没有比较简单点的语句呢?

追答

估计简化不了吧,要不你就把后半段补0那些去掉

追问

那这样我把1000转换成二进制还会是1111101000吗?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-01
convte.tostring(int 2) 家里没有数据库 前面那关键字可能写错了。你试试。
建议你在数据库上安装一个插件 这样方便多了。
第2个回答  2020-05-30
这个要看错误日志的
sql服务启动不了有好几个常见的问题,类似于破解版失效,ip配置错误啊,
看看日志文件c:\program
files\microsoft
sql
server\mssql类似目录下找到日志文件
不一定是这个地址,可以试试

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网