2009-07-31 4 views
1

한 서버에서 mysql 버전 5.0.45를 사용하고 다음 쿼리를 실행할 때 boolvalue = 'True'및 2.2 이외의 경우에는 1을 반환합니다.mysql case가 잘못된 값을 반환합니다

다른 서버 (웹 호스팅) 내가 사용하는 MySQL의 버전 5.0.22에
SELECT Q.value 
FROM (
SELECT (CASE table.boolvalue='True' WHEN 1 THEN 1 ELSE 2.2 END) AS value FROM table 
) Q; 

과 같은 쿼리는 항상 0.9999을 반환을 실행할 때, 왜?!

그러나이 쿼리를 사용하여이 예상대로 결과를 반환 : 나는 쿼리는 다른 물건처럼 서브 쿼리를 사용할 필요가

SELECT (CASE table.boolvalue='True' WHEN 1 THEN 1 ELSE 2.2 END) AS value FROM table 

, 그냥 오류가 어디 있는지를 보여주기 위해 그것을 아래로 끊었다. 누군가 제게 이것을 설명 할 수 있습니까?

답변

1

floating point 오류 일 수 있습니다. 번호 앞에 ROUND()을 붙이면 문제가 해결됩니다.

0

버그 일 수 있습니다. 결국 5.0.22는 매우 오래되었습니다. 그건 그렇고, 당신은 단순히 사용하는 경우에도

SELECT (CASE WHEN table.boolvalue='True' THEN 1 ELSE 2.2 END) AS value FROM table 

또는 귀하의 사례를 단순화 할 수 있어야한다 IF()

SELECT IF(table.boolvalue='True', 1, 2.2) AS value FROM table