我明白在比較花車的問題主機,並哀嘆他們在這種情況下使用 - 但我不是表作者,只有一個小障礙攀登...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
在我天真的嘗試,是字面浮點文字?或者它確實是一個十進制文字,稍後會被轉換?
如果我的文字不是浮點文字,那麼創建浮點文字的語法是什麼?
編輯:我發生了另一種可能性......它可能是一個比顯示更精確的數字存儲在這一列。創建代表這個數字的文字可能是不可能的。我會接受證明情況如此的答案。
編輯:對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