我有一個Joomla系統,我試圖改變搜索,以便它正確地找到數據庫中的浮點值。檢查MySQL Float字段上的相等性
所以,我在運行時建立一個查詢,看起來像這樣:
select 'column1'
from 'some_table'
where 'some_float_field' <=> '2.18'
這是不行的,它永遠不會匹配任何東西,即使我看到的記錄在數據庫中該值那裏。
於是,我就只是這樣做,而不是:
select 'column1'
from 'some_table'
where 'some_float_field' <=> 2.18
沒有運氣,所以後來我試圖強制轉換爲十進制(浮動不會出於某種原因),所以我想這:
select 'column1'
from 'some_table'
where 'some_float_field' <=> CAST('2.18' AS DECIMAL(20, 2))
沒有骰子...
請記住,> =或< =返回正確的結果,只是< =>給我的問題。
我該如何在這裏工作?
是的,在這種情況下,我實際上是在試圖找到用戶所投入東西的「重量」,但他們想要匹配確切的數字,所以我必須滿足要求。 – Joseph 2010-02-02 22:28:24
用戶需要在表中使用浮點數據類型嗎?通常,當用戶想要精確的分數(例如貨幣)時,十進制數據類型是更好的選擇。未來幾年你會遇到四捨五入的問題。想想看。如果它真的是金錢,無論如何,不要浪費時間,重新設計現在的小數點。相信我,我從這裏講述經驗。 – 2010-02-03 02:05:59
我同意塞瓦。在開始處理新數據庫之前,我要做的第一件事是運行以下查詢並查找使用了多少浮點數列。 SELECT DATA_TYPE,COUNT(*)AS mycount FROM information_schema.COLUMNS WHERE TABLE_SCHEMA NOT IN('information_schema','mysql')GROUP BY DATA_TYPE ORDER BY mycount DESC 如果我發現double,float,bigint和blob的數目是太高,我認爲會有很多問題。 如果十進制數,日期,日期時間,tinyint太小(或不足),那麼再次出現問題:) – shantanuo 2010-02-03 06:42:44