一个函数解决SQLServer中bigint 转 int带符号时报错问题

栏目: 数据库 · SQL Server · 发布时间: 7年前

内容简介:这篇文章主要介绍了解决SQLServer中bigint 转 int带符号时报错问题的函数,需要的朋友可以参考下

这篇文章主要介绍了解决SQLServer中bigint 转 int带符号时报错问题的函数,需要的朋友可以参考下

有一个需求是要在一个云监控的状态值中存储多个状态(包括可同时存在的各种异常、警告状态)使用了位运算机制在一个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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

风向

风向

何宝宏 / 人民邮电出版社 / 2019-1 / ¥68.00元

★这是处于不断变化的互联网时代,行业从业者与非专业从业者都应阅读的解惑之书。 ★揭示互联网思想和精神的“内核”,帮助更多人了解互联网基因。 ★看清人工智能、区块链、大数据、云计算等技术发展的规律和机会。 ★为投资者、创业者提供方向,为广大技术从业者了解技术,为就业择业者提供建议和参考。 ★中国信通院院长刘多、腾讯云总裁邱跃鹏做序推荐。 ★中国工程院院士邬贺铨、中国科学......一起来看看 《风向》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具