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




