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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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吗?

参考技术A convte.tostring(int 2) 家里没有数据库 前面那关键字可能写错了。你试试。
建议你在数据库上安装一个插件 这样方便多了。
参考技术B 这个要看错误日志的
sql服务启动不了有好几个常见的问题,类似于破解版失效,ip配置错误啊,
看看日志文件c:\program
files\microsoft
sql
server\mssql类似目录下找到日志文件
不一定是这个地址,可以试试

用c语言编写函数,将输入的十进制数转换成十六进制数并输出

//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
int main(void)
    unsigned n,i,k;
    printf("Please enter a positive integer...\\nn=");
    scanf("%d",&n);
    printf("%d(10) = 0x",n);
if(n)
for(i=0;(n&0xf0000000)==0;n<<=4,i++);
for(;i<8;i++)
k=n&0xf0000000;
(k>>=28)&=0x0f;
printf("%c",k<10 ? k+'0' : k+0x37);
n<<=4;


else printf("0");
    printf("\\n");
    return 0;

参考技术A 简单作法:用printf()函数格式输出完成
#include <stdio.h>
void main()

int n;

scanf("%d", &n ); //输入10进制数

printf("%x", n ); //输出16进制格式


超出整数范围的,需要用字符串实现,代码较为复杂,有兴趣可搜一下大数运算的C程序代码

以上是关于sql Server如何编写函数实现把十进制数转换为二进制数?求大神相助!!的主要内容,如果未能解决你的问题,请参考以下文章

怎样编写一程序:把一个十进制数转换成三进制数啊

c语言编写一程序,以字符串形式输入十进制数,将字符串对应的十进制数转换成二进制数,将得到的结果输出。

用C语言如何把十进制转换为十六进制,要求程序中运用函数

SQL Server系统函数:字符串函数

mysql如何把16进制转换成中文字符显示

js中有没有把十六进制数转换成Unicode字符的函数