我有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
答案 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所写,为什么不使用普通类型?