2010-02-28 41 views
1

假設你有一個字符串3.4564。從mysql數據庫檢索截斷記錄

在數據庫中的樣本集有這些記錄(VARCHAR):

Name  Score 

Peter  3.35643294332 
John  3.47870923 
James  3.740249842 
Henry  4.0432849 
Solomon 3.456183923 
Andrew  3.45743 

要截斷3.4564到小數點後3位(成爲3.456),然後用當四捨五入到數據庫中的值進行比較小數點後三位將給出與3.456相同的值,即檢索名稱'Solomon'

在php mysql中使用它的最佳方法是什麼?

+0

爲什麼分數存儲爲文本而不是數字? – cherouvim 2010-02-28 08:04:32

+0

因爲創建桌子的人認爲處理這件事更容易......現在是我必須付出代價。 – erastusnjuki 2010-02-28 12:37:02

回答

3

如果您的分數列包含以varchar存儲的數據,則可以使用CAST函數將這些數據轉換爲十進制數。例如:

mysql> select cast('3.35643294332' as decimal(10,3)); 
+----------------------------------------+ 
| cast('3.35643294332' as decimal(10,3)) | 
+----------------------------------------+ 
|         3.356 | 
+----------------------------------------+ 
1 row in set (0,01 sec) 


並注意這將正確地舍入值:

mysql> select cast('3.35663294332' as decimal(10,3)); 
+----------------------------------------+ 
| cast('3.35663294332' as decimal(10,3)) | 
+----------------------------------------+ 
|         3.357 | 
+----------------------------------------+ 
1 row in set (0,00 sec) 

即:

  • '3.3564'澆注到3.356
  • '3.3566'澆注到3.357


現在,你只需要使用cast功能在您的比較在你where條款。

我想這樣的事情應該工作,例如:

select * 
from your_table 
where cast(Score as decimal(10,3)) = cast('3.4564' as decimal(10,3)) 

即,你都轉換「輸入」和分數與小數3小數;並轉換這些值。


一個旁註:這樣做,你不會使用任何你可能在Score上得到的索引,並且總是以全掃描結束......這意味着另一種解決方案會更好。 。例如,如果你可以使用像score >= X and Score <= Y這樣的where子句,它會好得多...

但是,作爲Score存儲爲varchar,它不會那麼容易,我想 - 你應該存儲那些作爲小數,btw ...