我在嘗試刪除一行,其主鍵(列名=版本)例如是4.002000000000001。所以我給說的語句:刪除一行,其主鍵最接近X
DELETE FROM tbl WHERE version=4.002;
現在,現在這不會工作,因爲世界上沒有排,有一個版本等於4.002,只等於4.002000000000001版本的行。請不要問爲什麼我不把版本保存爲4.002在數據庫中,因爲我試圖通過使列類型DECIMAL(5,3)來實現,但它仍然存儲從Java的雙重4.002000000000001。請不要問我爲什麼不說「...... WHERE version = 4.002000000000001;」因爲當我使用JDBC創建語句時,我無法控制java如何格式化它(即使使用DecimalFormat類)。
那麼有沒有辦法在SQLite3中舍入(floor函數)?那麼我可以說「刪除FLOOR(版本)等於4.002的行?
我是C++程序員(使用Java查詢SQL數據庫,請不要問爲什麼:P)誰不熟悉複雜SQL查詢,所以這會是正確什麼,我想做的事:?
DELETE FROM tbl WHERE ROUND(version, 0.5)=4.002;
天哪埃普西隆邊界所有版本的指定。映射到「double」的十進制PK。這是......非常充滿的。 – 2011-02-25 23:09:51
我應該使用不同的Java數據類型嗎?浮動?也許是絃樂?我知道有一個SQL小數主鍵是不好的,但我正在更新一個大的現有項目和更好的框架內工作比重新設計和再次啓動。 – user593747 2011-02-25 23:14:03
我同意@Kirk ..你應該退後一步,深呼吸一下,然後問自己爲什麼你想要一個非整數作爲主鍵。 – johusman 2011-02-25 23:14:51