2013-03-30 6 views
1

bigint에 varchar를 캐스팅하려고합니다. 그런 다음 int 열에 삽입하십시오. 나는 내가 기대 한 가치를 얻지 못하고 있음을 발견했다.bigint로 float하려면 varchar를 캐스팅하십시오.

DECLARE @varData VARCHAR(50) 

SET @varData = '0000019.33' 

select cast(@varData *cast(100 as float) as bigint) 

select cast(@varData *cast(100 as float) as varchar) 

select cast(cast(@varData *cast(100 as float) as varchar) as float) 

결과 :

1932 

1933 

1933 

나는이 차이가오고 이유를 이해 할 수없는 나는 그 때 나는 다음 문을 시도했다. 그러나 값을 0000029.33으로 변경하면 결과에 차이가 없습니다.

나는 갇혀있어 왜 그런 일이 일어나는 지 알지 못합니다. 도움이 필요하다..!!!

답변

1

처럼 숫자로 CAST의 @vardata를 시도해야 참조하십시오 u는 지금 3 을 얻을 것이다 대신 2.97의 정수 유 그냥 0.000002 : 이 유

DECLARE @varData VARCHAR(50), 
     @float float, 
     @bigint bigint 

SET @varData = '0000019.33'  
set @bigint = convert (bigint, (convert (float, @vardata))) 
print @bigint 
--or 
set @float= convert (float, @vardata) 
set @bigint=convert (bigint, @float) 
print @bigint 
012 지금 더 잘 이해 희망을 변환 할 경우 손실 될 수있는 데이터의 양을 상상해보십시오
+0

값을 '0000019.73'으로 변경했습니다. 1973 년에 반올림하지 않았습니다. 마찬가지로 '0000029.33'의 경우 모든 쿼리에 대해 2933을 얻습니다. – AmarSharma

+0

UR은 유 @ck가 세트 @의 CK = 1.56 선택 캐스트 int로 UR은 선언 예 변수를 변환 할 때 손실이 발생하더라도에 0000000000000000000029.29 를 전환 할 수있는 번호를 변경하면서 데이터가 손실되지 않는다 (@ck VARCHAR 등) – DnL