将小端转换为十进制
Convert little endian to decimal
有没有办法在 T-SQL 中进行即时转换,将小字节序(我 20 分钟前才学会的东西)转换为十进制值?
在我正在使用的数据库中,有一个 table 使用来自设备的原始值进行更新,所有这些都是小端。在这个直接示例中,我有值 BD 0E 00 3A
,并且据推测,这应该转换为 3.773(至少是粗略的)。有没有一个函数可以让我立即将这个值转换成我想要的十进制值?
编辑 1: 我实际上发现了如何通过找到一位开发人员来翻译它。看起来前两个字节翻转为大端,给出了我需要的 3,773 值。当 windows 计算器进入编程器模式时,选择 HEX,输入 0EBD
给出此结果。有人知道我如何使用 T-SQL 做同样的事情吗?
这绝对不好看。我可以让你得到 3773
的整数值。如果这应该以某种方式转换为 3.773,则数据尚不清楚。
DECLARE @x varchar(32) = 'BD 0E 00 3A';
SELECT CONVERT(int, CONVERT(binary(2),
'0x' + RIGHT(LEFT(REPLACE(@x,' ',''),4),2)
+ LEFT(LEFT(REPLACE(@x,' ',''),4),2),1));
如果你确定前两部分之间总会有一个 space,你可以稍微简单一点:
DECLARE @x varchar(32) = 'BD 0E 00 3A';
SELECT CONVERT(int, CONVERT(binary(2),'0x' + SUBSTRING(@x,4,2) + LEFT(@x,2), 1));
下次他们想在 table 中存储一些整数时告诉他们,不要变得可爱或聪明。
有没有办法在 T-SQL 中进行即时转换,将小字节序(我 20 分钟前才学会的东西)转换为十进制值?
在我正在使用的数据库中,有一个 table 使用来自设备的原始值进行更新,所有这些都是小端。在这个直接示例中,我有值 BD 0E 00 3A
,并且据推测,这应该转换为 3.773(至少是粗略的)。有没有一个函数可以让我立即将这个值转换成我想要的十进制值?
编辑 1: 我实际上发现了如何通过找到一位开发人员来翻译它。看起来前两个字节翻转为大端,给出了我需要的 3,773 值。当 windows 计算器进入编程器模式时,选择 HEX,输入 0EBD
给出此结果。有人知道我如何使用 T-SQL 做同样的事情吗?
这绝对不好看。我可以让你得到 3773
的整数值。如果这应该以某种方式转换为 3.773,则数据尚不清楚。
DECLARE @x varchar(32) = 'BD 0E 00 3A';
SELECT CONVERT(int, CONVERT(binary(2),
'0x' + RIGHT(LEFT(REPLACE(@x,' ',''),4),2)
+ LEFT(LEFT(REPLACE(@x,' ',''),4),2),1));
如果你确定前两部分之间总会有一个 space,你可以稍微简单一点:
DECLARE @x varchar(32) = 'BD 0E 00 3A';
SELECT CONVERT(int, CONVERT(binary(2),'0x' + SUBSTRING(@x,4,2) + LEFT(@x,2), 1));
下次他们想在 table 中存储一些整数时告诉他们,不要变得可爱或聪明。