0
float 데이터 형식에 이상한 문제가 있습니다. 아래 스크린 샷을 찾으십시오.sql float 열 패딩 일부 분량 및 경계 조건 실패
쿼리 1은 기록을 제공합니다. Query 2가 레코드를 제공하지 않을 때. netbk_amt는 테이블에 float 유형입니다. 또한 첫 번째 쿼리를 >= (convert(float, 100001))
으로 변경하면 레코드가 제공되지 않습니다. 값이> 1000000하지만 < 1000001.입니다 그러나 1000000
이 쿼리에 무엇이 잘못되었는지 찾아 도와주세요로 테이블에이 표시처럼
보인다.
조회 :
select co_id, SUM(netbk_amt) from its_deal_sum where co_id = 19237
group by co_id
having convert(float,SUM(netbk_amt)) >= convert(float,1000000)
select co_id, SUM(netbk_amt) from its_deal_sum where co_id = 19237
group by co_id
having convert(float,SUM(netbk_amt)) <= convert(float,1000000)
내가 가지 이런 짓을하는 것은 의견 제안, 임시 수정 같은
select co_id, SUM(netbk_amt) from its_deal_sum where co_id = 19237 group by co_id having convert(money,SUM(netbk_amt)) = convert(money,1000000)
. 그러나 분수를 무시하고 플로트로 견고한 문제를 찾아야합니다.
왜 달러 금액에 대한 FLOAT를 사용하고 있습니까? 데이터 유형을 재검토 해 보시기 바랍니다. –
Raghav, "첫 번째 쿼리를> = (convert (float, 100001))로 변경하면"썼습니다. 이 숫자는 10^5 + 1입니다. 원하는 것은 10^6 + 1입니다. –
float의 값이 두 개의 float 사이의 차이로 계산되고 두 개의 float 중 하나를 float로 정확하게 표현할 수없는 경우 그 차이는 작은 부분으로 벗어날 수 있습니다. 예 : 1000001.01 - 0.01 = 1000000.0000000000001. (오류의 정확한 양은 확실치 않지만 일어날 수 있습니다.) Aaron의 말처럼 데이터 유형을 다시 고려하십시오. 부유물은 부적절합니다. –