플로트를 비교할 때 호스트의 문제점을 이해하고이 경우에 사용하는 것을 애도하지만 - 나는 테이블 작성자가 아니며 등반에는 작은 장애물이 있습니다 ...TSQL - 리터럴 플로트 값 만들기
누군가는 GUID가 사용되기를 기대하기 때문에 플로트를 사용하기로 결정했습니다. 특정 플로트 값으로 모든 레코드를 검색해야합니다.
sp_help MyTable
-- Column_name Type Computed Length Prec
-- RandomGrouping float no 8 53
가 여기 내 순진 시도입니다 :
--yields no results
SELECT RandomGrouping
FROM MyTable
WHERE RandomGrouping = 0.867153569942739
그리고 여기에 약 작업을 시도입니다 : 내 순진 시도에서
--yields 2 records
SELECT RandomGrouping
FROM MyTable
WHERE RandomGrouping BETWEEN 0.867153569942739 - 0.00000001
AND 0.867153569942739 + 0.00000001
-- 0.867153569942739
-- 0.867153569942739
, 그 리터럴 부동 소수점 리터럴? 아니면 실제로 변환 된 십진수 리터럴입니까?
리터럴이 부동 소수점 리터럴이 아닌 경우 부동 소수점 리터럴을 만들기위한 구문은 무엇입니까?
편집 : 또 다른 가능성이 생겼습니다 ... 표시되는 것보다 더 정확한 숫자가이 열에 저장되어있을 수 있습니다. 이 번호를 나타내는 리터럴을 만드는 것은 불가능할 수 있습니다. 나는 이것이 사실임을 입증하는 대답을 받아 들일 것이다.
EDIT : DVK에 대한 응답.
TSQL은 MSSQLServer의 SQL 언어입니다.
이 스크립트가 작동하고, 그래서 평등 플로트 타입 사이에 결정 론적으로 수행 할 수 있습니다
DECLARE @X float
SELECT top 1 @X = RandomGrouping
FROM MyTable
WHERE RandomGrouping BETWEEN 0.839110948199148 - 0.000000000001
AND 0.839110948199148 + 0.000000000001
--yields two records
SELECT *
FROM MyTable
WHERE RandomGrouping = @X
내가 말한 "약"범위에 대한 메소드 테스트 때문이다. 그 방법으로 나는 의도 한 가치와 같지 않은 가치를 얻을 수있었습니다.
십진법과 부동 소수점 사이의 세계 경계를 넘어서서 (의도적으로) 노력하지 않기 때문에 링크 된 기사가 적용되지 않습니다. 나는 수레만으로 일하려고 노력하고있어. 이것은 부동 소수점의 부동 소수점 값에 대한 비 변환성에 관한 것이 아닙니다. Zinglon에
응답 : 덕분에 내 기록을 찾을 수 있습니다
리터럴 값.
DECLARE @Y binary(8)
SET @Y = 0x3FEAD9FF34076378
SELECT *
FROM MyTable
WHERE convert(binary(8), RandomGrouping) = @Y