我试图找到信息以及如何找到。 但它没有任何有用的信息。
使用T-SQL,我想将负十进制转换为二进制 并将其转换回来。
示例值:-9223372036854775543
我尝试使用Calculater将此值转换为Bin结果为...
1000000000000000000000000000000000000000000000000000000100001001
并转换回12月。没关系。
如何使用T-SQL(SQL2008)脚本/函数进行转换? 很长时间才能找到如何获取的信息。 任何了解这一点的人,请帮忙。
答案 0 :(得分:0)
没有内置功能。
对于INT和BIGINT,您可以使用CONVERT(VARCHAR(100),CAST(3 AS VARBINARY(100)),2)
将十六进制表示形式作为字符串。那么你可以做一个简单的搜索替换,因为每个十六进制数字恰好代表4位二进制数但是,如果值超出BIGINT范围,则没有关于它们如何在内部表示的标准。您可能会得到正确的结果,并且这种行为甚至可能会在不同版本之间发生变化。
关于如何表示负数,也没有标准。大多数整数实现都使用two's-complement representation。在该表示中,最顶部的位表示数字的符号。你有多少比特是一个常规的完全依赖于你的环境。
在数学-3中,二进制是-11而不是11111101。
要解决您的问题,您可以使用CLR功能,也可以用老式的方式查看您的号码:
Is it odd? -> output a 1
Is it even? -> output a 0
integer divide by 2
repeat until the value is 0
这将为您提供相反顺序的数字,因此您必须翻转结果。要获得负数n的二进制补码表示,计算1-n,使用上述算法将结果转换为二进制,但使用反转数字(0而不是1,反之亦然)。将数字翻转到正确的顺序后,加上足够的1来填充“框”。