SQLServer中bigint转int带符号时报错问题解决方法
2014-09-11 00:00
363 查看
有一个需求是要在一个云监控的状态值中存储多个状态(包括可同时存在的各种异常、警告状态)使用了位运算机制在一个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
现在监控日志数据量非常大(亿级别)需要对数据按每小时、每天进行聚合,供在线报表使用。
状态分了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
相关文章推荐
- SQLServer中bigint转int带符号时报错问题解决方法
- 一个函数解决SQLServer中bigint 转 int带符号时报错问题
- 一个函数解决SQLServer中bigint 转 int带符号时报错问题
- fedora 15 安装opencv2.2时出现undefined reference to `cvCreateCameraCapture_V4L(int)'问题及其解决方法
- 在SQLServer处理中的一些问题及解决方法
- Sqlserver中tinyint, smallint, int, bigint的区别 及 10进制转换16进制的方法
- Sqlserver中tinyint, smallint, int, bigint的区别 及 10进制转换16进制的方法
- SQLServer乱码问题的分析及解决方法(中文字符被存入数据库后,显示为乱码)
- asp.net关于TextBox.Text的值为空时,将string数据插入到数据库中int数据的问题的解决方法
- jquery attr 设定src中含有&(宏)符号问题的解决方法
- Sqlserver中tinyint, smallint, int, bigint的区别 及 10进制转换16进制的方法
- 虚拟机上的系统,主键盘的数字键和符号键乱码问题的解决方法。
- sqlserver自动增长列引起的问题解决方法
- 分页显示问题的解决方法(jsp,sqlserver,mysql,oracle)
- 分页显示问题的解决方法(jsp,sqlserver,mysql,oracle)
- sqlserver自动增长列引起的问题解决方法
- sqlserver 2008手工修改表结构,表不能保存的问题与解决方法
- sqlserver 2008手工修改表结构,表不能保存的问题与解决方法
- String类中replaceAll方法不能替换美元符号$的问题解决
- sqlserver 2008手工修改表结构,表不能保存的问题与解决方法