最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQLServer中bigint轉int帶符號時報錯問題解決方法

 更新時間:2014年09月11日 17:16:31   投稿:whsnow  
用一個函數來解決SQLServer中bigint轉int帶符號時報錯問題,經測試可用,有類似問題的朋友可以參考下

有一個需求是要在一個云監(jiān)控的狀態(tài)值中存儲多個狀態(tài)(包括可同時存在的各種異常、警告狀態(tài))使用了位運算機制在一個int型中存儲。

現在監(jiān)控日志數據量非常大(億級別)需要對數據按每小時、每天進行聚合,供在線報表使用。
狀態(tài)分了3個級別:正常(0)、警告(1)、異常(2),聚合時需要使用max選擇最差的狀態(tài),就需要對狀態(tài)值進行處理加上級別和狀態(tài)位個數,就要借助bigint型來做運算了,

問題是再將bigint 轉為 int時獲取原始狀態(tài)值時,SQLServer報錯了:

消息 8115,級別 16,狀態(tài) 2,第 1 行
將 expression 轉換為數據類型 int 時出現算術溢出錯誤。

因為狀態(tài)碼中已經用到了 0x80000000, 出現了符號位的問題。
寫了一個轉換函數解決了。

CREATE FUNCTION [dbo].[BigintToInt]

(

@Value bigint 

)

RETURNS int

AS

BEGIN

-- 是否有int符號位

IF @Value & 0x80000000 <> 0 RETURN @Value & 0xFFFFFFFF | 0xFFFFFFFF00000000

-- 無符號位

RETURN @Value & 0xFFFFFFFF

END

相關文章

最新評論

临洮县| 莫力| 济阳县| 万盛区| 海伦市| 千阳县| 黔南| 习水县| 西昌市| 兴隆县| 林口县| 育儿| 洮南市| 平谷区| 普安县| 上饶市| 揭西县| 田林县| 西华县| 弋阳县| 河北区| 双峰县| 莱州市| 汤阴县| 甘泉县| 安庆市| 兰溪市| 亳州市| 瓮安县| 肃南| 嵩明县| 秀山| 南部县| 吴忠市| 浦县| 淄博市| 广西| 高州市| 晋宁县| 天柱县| 乌恰县|