zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    抱歉
    The area
    sort
    Problem D
    Problem B
    错排
    第8集 仪表开关电源照明原理图
    第7集 驱动与电气原理图绘制
    第6集 初步使用EPLAN部件库部件功能
    第5集 软件中建立项目结构
  • 原文地址:https://www.cnblogs.com/yryz/p/3899004.html
Copyright © 2011-2022 走看看