2013-03-04 2 views
2

나는 쿼리가의 MySQL CAST 반환 잘못된 데이터

SELECT MAX(CAST(user_name as SIGNED)) as max_id FROM (`users`) 

2.01303045556E+12 

을 반환하지만 실제로는 최대 값이 2013030455555

누구는 그런 일이 방법을 알고있다가 ??

+1

하지만 올바르게 포맷해야 할 수도 있습니다. [** here **] (http://www.sqlfiddle.com/#!2/e4cea/4). –

답변

2

맞습니다.

2.01303045556E+12 실제로는 2013030455555입니다.

x E+12는 (12 제로이어서 2) x*10^12

2*10^12=2000000000000을 의미한다.

이것은 표기법 (일반적으로 부동 소수점) 숫자 표현입니다. Scientific notation at wikipedia (아래로 스크롤하여 "E 표기법"참조)을 참조하십시오.

을 제거하려면 해당 데이터를 float 대신 10 진수 또는 정수로 전송할 수 있습니다. 어쩌면 더 나은 방법이 있을지 모르지만 나는 그걸 잘 모릅니다.

예 :

-- example for 16 digits 
SELECT MAX(CAST(user_name as DECIMAL(16,0)) as max_id FROM (`users`) 

또 다른 방법 : 수의 변화 형식 PHP SQL 또는 어쩌면 당신이 그것을 사용하는 경우.

+0

2013030455555로 변환하는 방법? 숫자가 너무 작 으면 실제 값으로 반환됩니까? – Shin

+0

여러분은 float을 사용해보십시오. php는 부호없는 정수를 지원하지 않습니다. (당신이 PHP를 사용하는 경우) – Dennis

+0

@Dennis 그는 6 자리 숫자보다 큰 "float"가 MySQL에 expotential 형식으로 표시되기 때문에 float를 사용할 수 없습니다. – Kamil