是否有一种方法可以在T-SQL中进行即时转换,以将一点Endian(我在大约20分钟前才学到的东西)转换为十进制值?
在我正在使用的数据库中,有一个表会用设备的原始值进行更新,所有这些值都是低端字节序。在这个直接的示例中,我具有值BD 0E 00 3A
,并且应该将其转换为3.773(至少大致而言)。是否有功能可以让我立即将此值转换为所需的十进制值?
编辑1:实际上,我找到了一名开发人员,发现了如何翻译它。似乎前两个字节翻转为大字节序,给出了我需要的3,773值。当Windows计算器进入编程器模式时,选择十六进制,将其0EBD
送入此结果。有人知道我如何使用T-SQL做同样的事情吗?
答案 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));
下次他们要在表中存储一些整数时,请告诉他们,不要对此感到可爱或聪明。