当前位置: 移动技术网 > IT编程>数据库>MSSQL > SQLServer中bigint转int带符号时报错问题解决方法

SQLServer中bigint转int带符号时报错问题解决方法

2017年12月12日  | 移动技术网IT编程  | 我要评论

宝象国特产,wood soon,富锦六中贴吧

有一个需求是要在一个云监控的状态值中存储多个状态(包括可同时存在的各种异常、警告状态)使用了位运算机制在一个int型中存储。

现在监控日志数据量非常大(亿级别)需要对数据按每小时、每天进行聚合,供在线报表使用。
状态分了3个级别:正常(0)、警告(1)、异常(2),聚合时需要使用max选择最差的状态,就需要对状态值进行处理加上级别和状态位个数,就要借助bigint型来做运算了,

问题是再将bigint 转为 int时获取原始状态值时,sqlserver报错了:

消息 8115,级别 16,状态 2,第 1 行
将 expression 转换为数据类型 int 时出现算术溢出错误。

因为状态码中已经用到了 0x80000000, 出现了符号位的问题。
写了一个转换函数解决了。

create function [dbo].[biginttoint]

(

@value bigint 

)

returns int

as

begin

-- 是否有int符号位

if @value & 0x80000000 <> 0 return @value & 0xffffffff | 0xffffffff00000000

-- 无符号位

return @value & 0xffffffff

end

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网