Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 这个数字系统是什么?_Sql_Sql Server_Tsql_Hex - Fatal编程技术网

Sql 这个数字系统是什么?

Sql 这个数字系统是什么?,sql,sql-server,tsql,hex,Sql,Sql Server,Tsql,Hex,我有一个SQL Server数据库,它有两个字段 First field value: 30303030303030333234 Second field value: 0000000324 现在,我被告知第一个值是十六进制的,但在我看来它与十六进制完全不同。破解并不难——第二个数字嵌入在第一个数字中,第二个数字中的每个数字都有一个“3”。所以第二个数字是10位,第一个数字是20位,加上10“3”。我可以使用字符串操作来转换,但我想知道第一个数字是否是任何已建立的数字系统,或者是否有标准的

我有一个SQL Server数据库,它有两个字段

First field value:  30303030303030333234
Second field value:  0000000324
现在,我被告知第一个值是十六进制的,但在我看来它与十六进制完全不同。破解并不难——第二个数字嵌入在第一个数字中,第二个数字中的每个数字都有一个“3”。所以第二个数字是10位,第一个数字是20位,加上10“3”。我可以使用字符串操作来转换,但我想知道第一个数字是否是任何已建立的数字系统,或者是否有标准的转换方法?

实际上,它看起来完全像十六进制,尽管它的值仅限于存储在第二个字段中的小数字

第一个字段只是第二个字段中字符的ASCII(或Unicode)代码点:

ASCII code
point (hex)  Character
===========  =========
    30           0
    31           1
    32           2
    33           3
    34           4
    35           5
    36           6
    37           7
    38           8
    39           9
现在,他们选择将数据存储为文本和十六进制字符串可能有一个合理的原因,但我想不出一个好的方法。在任何情况下,它似乎都违反了3NF(尽管有时也有合理的理由这样做)

至于如何转换它们,如果您在最喜欢的搜索引擎中查找
sqlserver ascii十六进制字符串
,您会在web上找到许多文章(例如)。实际上,它看起来完全像十六进制,尽管它的值仅限于存储在第二个字段中的小数字

第一个字段只是第二个字段中字符的ASCII(或Unicode)代码点:

ASCII code
point (hex)  Character
===========  =========
    30           0
    31           1
    32           2
    33           3
    34           4
    35           5
    36           6
    37           7
    38           8
    39           9
现在,他们选择将数据存储为文本和十六进制字符串可能有一个合理的原因,但我想不出一个好的方法。在任何情况下,它似乎都违反了3NF(尽管有时也有合理的理由这样做)


关于如何转换它们,如果您在最喜欢的搜索引擎中查找
sqlserver ascii十六进制字符串
,您会在web上找到许多文章(例如)。

这个问题似乎离题了,因为它是关于解码一个琐碎的编码系统。@wallyk,不确定这会使它离题。是的,这对本领域的技术人员来说很容易,但这里并不是每个人都这样。这个问题似乎离题了,因为它是关于解码一个微不足道的编码系统的。@wallyk,不确定这会使它离题。是的,对那些技术熟练的人来说这很容易,但这不是这里的每个人。我已经看过了。我试图创建一个函数,但是我不能在函数中使用sp_executesql proc,所以我试图构建一个字符串。问题是我最终得到了:
set@returnstring=@returnstring+char(cast('0x'+@pair as varbinary))
…其中@pair是字符串中的每一对十六进制字符(我在这里循环)。这是不好的,因为这是一个字符串,我需要这样结束:
selectchar(CAST(0x34作为varbinary))
而不是'selectchar(CAST('0x34'作为varbinary')。知道怎么做吗?我已经看过了。我试图创建一个函数,但是我不能在函数中使用sp_executesql proc,所以我试图构建一个字符串。问题是我最终得到了:
set@returnstring=@returnstring+char(cast('0x'+@pair as varbinary))
…其中@pair是字符串中的每一对十六进制字符(我在这里循环)。这是不好的,因为这是一个字符串,我需要这样结束:
selectchar(CAST(0x34作为varbinary))
而不是'selectchar(CAST('0x34'作为varbinary')。你知道怎么做吗?