程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> 一個函數處理SQLServer中bigint 轉 int帶符號時報錯成績

一個函數處理SQLServer中bigint 轉 int帶符號時報錯成績

編輯:MSSQL

一個函數處理SQLServer中bigint 轉 int帶符號時報錯成績。本站提示廣大學習愛好者:(一個函數處理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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved