MSSQL에서 10진수를 16진수로 변환, 또는 16진수를 10진수로 변환하는 함수를 제공하지 않는 것 같다.
그래서 함수를 직접 만들어서 사용한다.
일단, 10진수를 16진수로 변환하는 함수다.
1. 10진수 => 16진수 변환 함수
CREATE function fn_dectohex(@dec bigint)
returns nvarchar(50) as
begin
if @dec =0
begin return '0'; end
declare @hex nvarchar(50)
select @hex = '';
while (@dec > 0)
begin
declare @h nvarchar(1)
declare @n int
select @n = @dec % 16
if(@n = 10)begin select @h = 'a' end
else if(@n = 11)begin select @h = 'b' end
else if(@n = 12)begin select @h = 'c' end
else if(@n = 13)begin select @h = 'd' end
else if(@n = 14)begin select @h = 'e' end
else if(@n = 15)begin select @h = 'f' end
else begin select @h = convert(nvarchar(1), @n) end
select @hex = @h + @hex
select @dec = @dec/16
end
return @hex
end
간단히 설명하자면,
10진수를 파라미터로 받아서
16으로 나눠준 다음 몫을 계속 붙여준다.
(파라미터가 0이 될때 까지 반복.)
10진수 10을 16진수에서는 a
10진수 11을 16진수에서는 b
10진수 12을 16진수에서는 c
10진수 13을 16진수에서는 d
10진수 14을 16진수에서는 e
10진수 15을 16진수에서는 f
으로 표기하기 때문에 if else로 분기처리를 해준다.
아래와 같이 사용할 수 있다.
SELECT dbo.fn_dectohex(15)
-- 결과 : f
2. 반대로 16진수 => 10진수로 변경하는 방법은
간단하다.
DECLARE @HEX_INDEX AS varchar(16)
SET @HEX_INDEX = '0123456789abcdef'
SELECT CHARINDEX('b',@HEX_INDEX)-1
-- 결과 : 11 (16진수 b는 10진수로 11)
@HEX_INDEX를 '0123456789abcdef' 로 지정해 놓고,
CHARINDEX 함수를 사용해 16진수의 INDEX를 구하는 것이다.
16진수 한글자 밖에 되지 않으니, 복수의 16진수는 함수를 만들어 사용해야한다.(원리는 같다.)
MSSQL 10 16 진수 변환 함수
'SQL > MS-SQL & SQL Server Management Studio' 카테고리의 다른 글
[ms sql] 테이블 다른 서버 디비로 옮기기 (0) | 2020.04.28 |
---|---|
mssql update 하위쿼리 (서브쿼리) (0) | 2020.03.05 |
[MS SQL] INSERT 여러개 한번에 하기 (0) | 2020.01.21 |
[MS-SQL] 버전 확인하는 방법 (0) | 2019.12.30 |
[ms sql] print() 함수/ print()함수 결과로 아무것도 출력이 안됨 / (동적쿼리 사용시 유용) (0) | 2019.12.09 |
댓글