将little endian转换为十进制

时间:2020-06-03 21:51:14

标签: sql-server-2016

是否有一种方法可以在T-SQL中进行即时转换,以将一点Endian(我在大约20分钟前才学到的东西)转换为十进制值?

在我正在使用的数据库中,有一个表会用设备的原始值进行更新,所有这些值都是低端字节序。在这个直接的示例中,我具有值BD 0E 00 3A,并且应该将其转换为3.773(至少大致而言)。是否有功能可以让我立即将此值转换为所需的十进制值?


编辑1:实际上,我找到了一名开发人员,发现了如何翻译它。似乎前两个字节翻转为大字节序,给出了我需要的3,773值。当Windows计算器进入编程器模式时,选择十六进制,将其0EBD送入此结果。有人知道我如何使用T-SQL做同样的事情吗?

enter image description here

1 个答案:

答案 0 :(得分:0)

这绝对不漂亮。我可以得到一个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));

如果您确定在前两个部分之间总会有一个空格,则可以执行以下操作:

DECLARE @x varchar(32) = 'BD 0E 00 3A';

SELECT CONVERT(int, CONVERT(binary(2),'0x' + SUBSTRING(@x,4,2) + LEFT(@x,2), 1));

下次他们要在表中存储一些整数时,请告诉他们,不要对此感到可爱或聪明。

相关问题