Sql server转换为实际数据类型

时间:2016-07-15 07:22:49

标签: sql type-conversion

我有2个寄存器从PLC(modbus)传输到sql server,每个16位。我想组合这2个整数,并转换为Real sql数据类型

declare @int1, @int2 integer

declare @result real

Select @int1 = 18196
     , @int2 = 28800

Select @result = @int1 * 65536 + @int2 //-- this result is not wanted

我需要与我的Plc相同的结果,结果是38000.5

如何在sql ???中转换为真实数据类型

我的头疼,搜索网,谢谢你的帮助

另一种方式是

select @result = 38000.5

Select convert(integer, substring(convert(varbinary, @result),1,2) //18196

Select convert(integer, substring(convert(varbinary, @result),3,2) //28800

1 个答案:

答案 0 :(得分:0)

declare  @result real 
declare @first int, @second int

set @result=38000.5


set @first = convert(integer, substring(convert(varbinary, @result),1,2)) --18196
set @second = convert(integer, substring(convert(varbinary, @result),3,2)) --28800

print @first
print @second
declare @binaryfloat varbinary(4)=convert(varbinary(2),@first)+convert(varbinary(2),@second);

SELECT SIGN(CAST(@BinaryFloat AS INT))
  * (1.0 + (CAST(@BinaryFloat AS INT) &  0x007FFFFF) * POWER(CAST(2 AS REAL), -23))
  * POWER(CAST(2 AS REAL), (CAST(@BinaryFloat AS INT) & 0x7f800000) / 0x00800000 - 127)

但正如@honeybadger所写,为什么不使用普通类型?