> 데이터 베이스 > MySQL 튜토리얼 > 부동 소수점 값을 상수와 비교할 때 MySQL SELECT 문이 행을 반환하지 않는 이유는 무엇입니까?

부동 소수점 값을 상수와 비교할 때 MySQL SELECT 문이 행을 반환하지 않는 이유는 무엇입니까?

DDD
풀어 주다: 2024-10-29 10:51:02
원래의
499명이 탐색했습니다.

Why Does My MySQL SELECT Statement Return No Rows When Comparing a Float Value to a Constant?

MySQL Selects의 부동 소수점 불일치 해결

float 값을 상수와 비교하는 WHERE 절이 포함된 SELECT 문을 실행할 때, 사용자는 예상치 못한 결과를 겪을 수 있습니다. 예를 들어 다음 쿼리는 행을 반환하지 않습니다.

<code class="sql">SELECT * FROM `table` WHERE `ident`='ident23' AND `price`='101.31';</code>
로그인 후 복사

그러나 가격 비교 조건을 제거하면 올바른 행이 생성됩니다.

<code class="sql">SELECT * FROM `table`;</code>
로그인 후 복사

이러한 불일치는 MySQL이 처리하는 방식에 기인할 수 있습니다. 부동 소수점 정밀도. 데이터베이스에서 검색된 값은 '101.31'로 표시되지만 부동 소수점 연산의 부정확성으로 인해 WHERE 절에 사용된 실제 상수와 약간 다를 수 있습니다.

해결책: DECIMAL로 캐스팅

이 문제를 해결하려면 가격 열을 WHERE 절의 DECIMAL 유형으로 캐스팅하면 됩니다.

<code class="sql">SELECT * FROM `table` WHERE CAST(price AS DECIMAL) = CAST(101.31 AS DECIMAL);</code>
로그인 후 복사

이렇게 하면 데이터베이스 값과 상수가 모두 DECIMAL로 표시됩니다. 잠재적인 정밀도 문제를 제거합니다.

대체 솔루션: 열 유형 변경

대안으로 가격 열의 데이터 유형을 DECIMAL로 직접 변경하는 것이 좋습니다. DECIMAL은 금전적 가치로 작업할 때 더 높은 정밀도와 규모를 제공하므로 SELECT 쿼리에서 캐스팅할 필요가 없습니다.

위 내용은 부동 소수점 값을 상수와 비교할 때 MySQL SELECT 문이 행을 반환하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿