2012-09-27 43 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); 
相关问题