SQL Server:如何将二进制文件转换回int

时间:2017-01-03 08:43:54

标签: sql sql-server binary type-conversion sql-convert

我们的IS管理员将{00010000'(仅为真和假)等8个标志存储到SQL Server binary(2)。在此格式中,数据的值为“0x1000”。

可以将此二进制文件转换回'00010000'吗?

ConvertCastSubstring不起作用。

3 个答案:

答案 0 :(得分:0)

您的原始数据很可能已丢失。在SQL中将数字转换为二进制时,存储该数据的“空间”数量有限,空间由字段的字节大小决定,在本例中为2.

当数据保存到数据库时会出现问题,使用二进制文件(2)表示数据在保存时被截断,这意味着您在数据中至少丢失了4个“标记”。 (二进制数字开头的4个数字)。

例如,下面显示了SQL存储二进制数6,4和2中数字10010010的内容。

Binary(6) - 0x00000098BD9A
Binary(4) - 0x0098BD9A
Binary(2) - 0xBD9A

正如您所看到的,使用二进制2表示您丢失了数字中的数据。这已经消失,无法使用数据库检索(除非您保存事务日志,如果您有一个DBA存储布尔值作为8位块使用二进制(2)字段,我怀疑你有)。很抱歉这样说,但你根本无法做到你需要做的事情,并且想到使用二进制(2)获得8位数字的人是个好主意,然后没有测试他们的决定是否应该受到指责。

答案 1 :(得分:0)

查询返回十六进制数(0x ... - 十六进制)作为其位掩码

using a = System.Web.Http;

[a.Route("Hello/Jan")]
public IEnumerable<Department> GetDepartmets()
{
    var x = pro.GetDept();
    return x.ToList();
}

[a.Route("Hello/Jan/{id?}")]
public HttpResponseMessage GetDepartmets(int id)
{
     if (id != null)
        {
            var x = pro.GetDeptById(id);
            return Request.CreateResponse(HttpStatusCode.OK, x);
        }
        else
            return Request.CreateResponse(HttpStatusCode.NotFound);

}

答案 2 :(得分:0)

是的,你可以

BINARY(2)表示2个字节,所以16位

0x3000 =&#39; 0011000000000000&#39;

declare @v int = 0x3000

;WITH
T AS (  SELECT NULL N   UNION ALL   SELECT NULL ),
N as (
    SELECT ROW_NUMBER() OVER (ORDER BY T2.N) N
    FROM T T2, T T4, T T8, T T16
),
V AS (
    select N, POWER(2,N-1) P, CAST(@v as binary(2)) b2, @v V
    from N
),
B AS (
    SELECT N, B2, CAST((V/P) % 2 AS char(1)) B
    from V
)
SELECT B2, [16]+[15]+[14]+[13]+[12]+[11]+[10]+[9]+[8]+[7]+[6]+[5]+[4]+[3]+[2]+[1] BASE2
FROM B
PIVOT ( MIN(B) FOR N IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16]) ) P

输出

B2      BASE2
0x3000  0011000000000000