Hex To Decimal and Decimal to Hex in MSSQL

ไม่ได้เขียนมาซะนานเนื่องจากงานยุ่ง วันก่อนมีพี่คนนึงถามว่า

“เอ๊ะ ใน MSSQL มี Function Hex To Decimal และ Decimal to Hex มั้ย?”

ผมก็เอาเลยเริ่มค้นหา ก็ทำให้รู้ว่ามันไม่มี Function นี้ในตัวของมันเอง ต้องเขียนเอง เลยลองค้นๆใน Google ดู ก็พบ Function ที่ Work!! ลองเอาไปใช้งานกันดูครับ

Function IntToHex

create function HexToInt(@vsData char(8))

RETURNS int AS

begin

 declare @iDataLength int

 declare @iDataLengthM1 int

 declare @iResult     int set @iResult = 0

 declare @i           int set @i       = 0

 declare @iTemp       int set @iTemp   = 1

 declare @iTempMax    int

 set @iDataLength=len(@vsData)

 if not @vsData like replicate('[0-9a-fA-F]',@iDataLength) return NULL

 set @iDataLengthM1=@iDataLength-1

 while @i < @iDataLength begin

  if @i=@iDataLengthM1 begin

   set @iTempMax=(ASCII(substring(@vsData, @iDataLength - @i, 1))&79)%55

   set @iResult =(@iResult+(@iTempMax&7)*@iTemp)

   if (@iTempMax&8)=8 set @iResult=@iResult-(Power(16,@iDataLengthM1)-1)*8-8

  end else begin

   set @iResult =@iResult+((ASCII(substring(@vsData, @iDataLength - @i, 1))&79)%55)*@iTemp

  end

  set @i = @i + 1

  if @i<8 set @iTemp = 16 * @iTemp

 end

 Return @iResult

end

Function HexToInt

Create function [dbo].[IntToHex](@Dec as bigint) --@Hex As varchar(8) Output)

returns varchar(16) as

BEGIN

      Declare @HexDigits as char(16)

      declare @Hex as varchar(16)      Set @HexDigits = '0123456789ABCDEF'

Set @Hex = ''

      While @Dec >= 16

         Begin

           Set @Hex = SubString(@HexDigits, (@Dec % 16) + 1, 1) + @Hex

           Set @Dec = @Dec / 16

         End

Set @Hex = SubString(@HexDigits, @Dec + 1, 1) + @Hex

return @hex

end

ตัวอย่างการเรียกใช้งาน

select dbo.HexToInt('2A') as HexToInt, dbo.IntToHex(dbo.HexToInt('2A')) as IntToHex

result
42 2A

Leave a Reply