2013-10-09 9 views
1

TSQL을 사용하려고합니다. 값이 변수 안에 있으면 십진수로 16 진수로 변환하는 데 약간의 문제가 있습니다.T-SQL 16 진수로 16 진수로 변환

내 코드는 다음과 같습니다

SET @hex = SUBSTRING(@x,1,2) --give 1e 
SET @hex = '0x' + @hex 
SELECT CAST (@hex AS int) 

내가 잘못이 무엇인지 알 수 지금까지 내가 찾을 수

int로하는 VARCHAR 값을 변환 할 때 변환이 실패하는 오류 솔루션

아이디어가 있으십니까? 감사합니다

답변

5

을 함수에 넣고 또는 저장하는 것이 좋습니다 2008 이상) :

declare @hex varchar(316) 
SET @hex = '1e' --SUBSTRING(@x,1,2) --give 1e 
SET @hex = '0x' + @hex 
SELECT CONVERT(int,CONVERT (binary(1),@hex,1)) 

CAST and CONVERT 페이지의 "진 스타일"을 참조하십시오.

+0

쿼리를 실행하면 48이라는 결과가 나타납니다. 그러나 16 진수 1e의 십진수는 30입니다. 왜 이런 일이 발생했는지 알 수 있습니까? – th1rdey3

+1

@ th1rdey3 - 내 컴퓨터에서 실행하면 결과는 30입니다. 2005 서버에 대해 실행하면 48이됩니다. 그래서 2008 년 이후라고 말한 것입니다. 2005의 경우 '0'에 대한 ASCII 값이 48임을 나타냅니다. –

+1

@Damien_The_Unbeliever 재미있는 차이점은 'SQL Server 전후의'CONVERT '의 차이점을 설명 할 수 있습니까? 2008'? 대답의 링크에서 찾을 수 없습니다. – DrCopyPaste

1

나는 T-SQL 명시 적으로 숫자로 진수의 문자열을 변환 할 수 있다고 생각하지 않습니다,하지만 당신은 종류의 당신이 원하는 일을로를 속일 수 있도록이 16 진수로 변환 할 수 있습니다. 이처럼 :

DECLARE @hex nvarchar(20) 
DECLARE @select nvarchar(200) 
DECLARE @parm nvarchar(200) 
DECLARE @retVal int 
SET @hex = '0x1e' 
SET @select = 'SELECT @retVal = CAST(' + @hex + ' AS int)' 
SET @parm = '@retVal int OUTPUT' 
EXEC sp_executesql @select, @parm, @retVal OUTPUT 
SELECT @retVal 

당신은 SQL 주입 공격으로부터 보호하기 위해 @hex의 유효성을 검사 할 것입니다, 당신은 아마이 SQL Server에 대한 (작동 시저에게