sql 里, Int 转二进制 function
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create FUNCTION [dbo].[DecToBin](@Dec Int)
RETURNS VARCHAR(32)
AS
begin
declare @BinStr as varchar(34)
declare @Mod2 as int
declare @Div2 as int
set @Div2 = @Dec / 2
set @Mod2 = @Dec % 2
set @BinStr=''
while @Div2<>0
begin
if @Mod2=0
set @BinStr = @BinStr + '0'
else
set @BinStr = @BinStr + '1'
set @Dec = @Dec / 2
set @Div2 = @Dec / 2
set @Mod2 = @Dec % 2
end
set @BinStr = @BinStr + '1'
return REVERSE(@BinStr + right('00000000000000000000000000000000',32-len(@BinStr)))
end
位序 | 外设状态 | GPRS |
| ST定位,天线,电源状态 | ||||
高字一 | 高字二 | 低字一 | 低字二 | |||||
7 | 1 |
| 1 | ACC(开) | 1 | 已差分定位 | 1 | GPS已定位 |
6 | 1 |
| 1 |
| 收星数量 范围:0—15 | D6 D5 1 1 GPS正常 1 0 GPS天线短路 0 1 GPS天线开路 0 0 GPS模块故障 | ||
5 | 1 |
| 1 |
| ||||
4 | 1 |
| 1 |
| D4 D3 1 1 电源正常 1 0 主电源掉电 0 1 主电源过高过低 | |||
3 | 1 |
| 1 |
| ||||
2 | 1 |
| 1 |
| 1 |
| D2 D1 D0 0 0 0 新协议标志 1 1 1 原协议标志 | |
1 | 1 |
| 1 |
| 1 |
| ||
0 | 1 |
| 1 |
| 1 |
|
acc 在 高字节第七位.
用这种方法,在 sql 中也可判断位是否为零或 1
( TermStatu & 0x800000 ) = 0x800000
( TermStatu & 0x800000 ) != 0x800000
select * , substring(dbo.DecToBin(TermStatu),9,1) acc from gps_pos where ( TermStatu & 0x800000 ) = 0x800000