2012-09-27 44 views
0

我將創建從十六進制取得了連續的序列號值轉換十六進制爲INT,反之亦然

這種格式:

XX-XX-XX-YYYY 
Which XX-XX-XX is default value 
And YYYY is the incrementing hexa decimal value 

我們基於十六進制值,我需要添加創建序列號6到最後生成的十六進制值

MIN: 2D41 + 6 = 2D47  
    2D47 + 6 ... and so on 
MAX: 4100 generation of serial will stop when I meet the MAX value. 

我已經創造了它在C#中,但我需要做的是在SQL

int num1 = int.Parse("2D41", NumberStyles.HexNumber); //Convert hex to int 
int result = num1 + 6; //Add + 6 for increment 
string myHex = result.ToString("X"); //Convert result to hex 
MessageBox.Show(myHex); // result 2D47 

這怎麼能在T-SQL中完成?

回答

3

希望這有助於你

declare @seed varchar(max) = '2D41'; 
declare @limit varchar(max) = '4100'; 

select convert(int, convert(varbinary(max), '0x'[email protected],1)), 
     convert(int, convert(varbinary(max), '0x'[email protected],1)); 

;with seedlimit(seed, limit) as (
    select convert(int, convert(varbinary(max), '0x'[email protected],1)), 
      convert(int, convert(varbinary(max), '0x'[email protected],1)) 
) 
select SerialNumber = 'XX-XX-XX-' + right(convert(varchar(10),cast(s.seed + 6 * v.number as varbinary(max)),1),4) 
from seedlimit s 
join master.dbo.spt_values v on type='p' 
where s.seed + 6 * v.number <= s.limit; 

其基本成分都在那裏爲您創建一個視圖/過程/函數出來的答案,

輸出:

SerialNumber 
------------- 
XX-XX-XX-2D41 
XX-XX-XX-2D47 
... 
XX-XX-XX-40F7 
XX-XX-XX-40FD 
4
DECLARE @x VARBINARY(8) = 0x00002D41; 
SELECT CONVERT(VARBINARY(8), CONVERT(INT, @x) + 6); 

爲了處理輸出作爲一個字符串:

DECLARE @x VARBINARY(8) = 0x00002D41; 
SELECT CONVERT(CHAR(10), CONVERT(VARBINARY(8), CONVERT(INT, @x) + 6), 1); 
相關問題