2011-08-25 4 views
1

이 변환이 실패한 이유를 모릅니다.SQL Server 2008 - 문자열에서 int 로의 변환이 실패합니다.

SELECT CAST('32.999' AS INT) 

데이터로 '32 .000 ' int 타입을 VARCHAR 값을 변환 할 때

변환 실패라고 에러를 던진다. 32.000 직접 Int로 변환되지 않는 이유

은 내가 Decimal로 변환 할 수 있습니다 알고 다음 Int로 변환하지만?

여기에 뭔가가 있습니까?

--EDIT--

나는 소수점에 대해 신경 쓰지 않는다. SQL에서 SQL을 무시하기를 원합니다.

답변

5

32.000은 소수 자리 때문에 int로 정확하게 표현할 수 없습니다. 대신 소수 자릿수가있는 숫자 값을 원하면 float (또는 숫자) 데이터 유형을 사용할 수 있습니다.

Select CAST('32.000' as float) 

편집 : misread your question a little.

나는 SQL이 의도를 보존하는 것이 최선이라고 가정하고 있습니다. 캐스트하려고하는 숫자 값에 10 진수 값이있는 것으로 표시되면이를 거부합니다.

+1

좋은 지적이지만 나는 소수점을 abt에 신경 쓰지 않는다. 나는 그들을 SQL을 무시하고 싶습니다. – Asdfg

+0

'32.000 '을 부동 소수점 형으로 캐스팅하면 해당 값의 표시는'32 '가됩니다. .000 – Zhais

+1

@Asdfg SQL은 명시 적으로 그렇게하지 않는 한 SQL을 무시하지 않습니다. 그렇게하는 한 가지 방법은 제안 된대로'캐스팅 '하는 것입니다. 또 다른 방법은 처음부터 그들을 포함하지 않는 것입니다. –

1

SELECT CAST(ROUND('32.999',0,1) AS INT)을 사용하면 잘 작동합니다.

+1

'32 .9'의 값을 가지고 라운드를 시도하면 33이됩니다. 그러나 32 자에서 '32 .000 ', 0,1)의 결과가 올 바릅니다. http : //msdn.microsoft.com/en-us/library/ms175003.aspx – Zhais

+0

이 맞습니다. 나는 그것을 또한 알아 차렸다. 그 점을 지적 해 주셔서 감사합니다. – Asdfg

관련 문제