我正在尝试将 sql 中的 10 进制数转换为 2 进制数/二进制数,但返回的不是个数和零数
I'm trying to convert a base 10 number in sql to base 2 / binary but what's being returned ins't ones and zero's
我只是使用一些简单的 sql 来尝试让它工作,然后我将把它实现到我的程序中。
所以我的代码如下:
select convert(varbinary(16), cast('63' as int)))
我从这个查询得到的结果是 0x000003F,这不是我想要的,我期待 000111111。
有谁知道它为什么这样做以及如何让它将数字显示为 1 和 0,将不胜感激,谢谢。这是使用 MSSql。
正如 MySQL 中的 collapsar 注释,您需要指定基数 2,这正是您在这里所缺少的。如果没有它,MySQL 这里默认为十六进制编码,但您需要提供一个数字 (63)、一个起始基数 (10) 和一个最终基数 (2)。
把这些放在一起你得到 select conv(63, 10, 2)
sqlfiddle
在 MSSQL 中,我想你可以试试这个:
DECLARE @var1 AS int;
SET @var1=12;
WITH A AS (
SELECT 0 AS ORD, @var1 AS NUMBER, CAST('' AS VARCHAR(20)) AS BITS
UNION ALL
SELECT ORD+1, NUMBER/2, CAST(BITS+CAST(NUMBER%2 AS VARCHAR(20)) AS VARCHAR(20))
FROM A
WHERE NUMBER>0)
SELECT RIGHT('000000000000000'+ CASE WHEN BITS='' THEN '0' ELSE REVERSE(BITS) END,16) AS BIN_VALUE
FROM A
WHERE NUMBER=0;
输出:
BIN_VALUE
0000000000001100
我只是使用一些简单的 sql 来尝试让它工作,然后我将把它实现到我的程序中。
所以我的代码如下:
select convert(varbinary(16), cast('63' as int)))
我从这个查询得到的结果是 0x000003F,这不是我想要的,我期待 000111111。
有谁知道它为什么这样做以及如何让它将数字显示为 1 和 0,将不胜感激,谢谢。这是使用 MSSql。
正如 MySQL 中的 collapsar 注释,您需要指定基数 2,这正是您在这里所缺少的。如果没有它,MySQL 这里默认为十六进制编码,但您需要提供一个数字 (63)、一个起始基数 (10) 和一个最终基数 (2)。
把这些放在一起你得到 select conv(63, 10, 2)
sqlfiddle
在 MSSQL 中,我想你可以试试这个:
DECLARE @var1 AS int;
SET @var1=12;
WITH A AS (
SELECT 0 AS ORD, @var1 AS NUMBER, CAST('' AS VARCHAR(20)) AS BITS
UNION ALL
SELECT ORD+1, NUMBER/2, CAST(BITS+CAST(NUMBER%2 AS VARCHAR(20)) AS VARCHAR(20))
FROM A
WHERE NUMBER>0)
SELECT RIGHT('000000000000000'+ CASE WHEN BITS='' THEN '0' ELSE REVERSE(BITS) END,16) AS BIN_VALUE
FROM A
WHERE NUMBER=0;
输出:
BIN_VALUE
0000000000001100