2011-07-06 2 views
0

이 과학적 가치를 찾는 문제는 내가 (플로트 타입에 저장) mysql을 "1E-06"에 열MySQL의 데이터베이스

나는 "0.000001"이 값에 대한 검색을 수행 할 때에이 값을 저장 한 나는 성냥을 얻지 못한다. 어떤 아이디어? 이 mailing list thread 가입일

SELECT * 
FROM `MATCH__DESTINATION` 
WHERE `W_m` = 0.000001 

답변

0

[t] 르 내에없는 경우

MySQL이 동등한 플로트 수를 검출하지 않는이

플로트 ALWA 왼쪽 [Y]는 큰이야 그 다음에 오른쪽 플로트. 1.1> 1.1 = 참.

mysql> SELECT * FROM float_bug WHERE f=1.1; Empty set (0.00 sec)

그것은 소수점 연산 부동의 엄밀하지 않음입니다. 대신 DECIMAL 유형 을 사용하십시오.

0

일치하는 열과 값을 십진수 정밀도로 제한하고 비교해보십시오.

SELECT * 
FROM `MATCH__DESTINATION` 
WHERE Cast(`W_m` as Decimal(6,6)) = Cast(0.000001 as Decimal(6,6)) 
0

수행중인 작업에 문제가 없습니다. SELECT가 결과를 반환하지 않는 유일한 이유는 일치하는 것이 없기 때문입니다. 몇 가지 :

  1. W_m 6 소수점 개까지 부동 값을 허용합니까?

  2. 정말 테이블에 이러한 값이 존재합니까? 다른 레코드 조건자를 사용하여 W_m이 1e-06 인 동일한 레코드를 가져올 수 있습니까? 그렇지 않은 경우 SELECT *을 WHERE 조건없이 수행 한 다음 해당 레코드가 실제로 존재하는지 수동으로 확인할 수 있습니까?