2016-06-07 31 views
0

我得到一個varchar字段說的值爲174,但是當我cast(field as decimal(3,1))它給我總是99.9?我如何投射或將其轉換爲17.4?或者我必須在源代碼級更改要以十進制輸入的輸入嗎?Mysql投到十進制給99.9

回答

3

這是因爲174不能用小數點前2位和小數點後1位表示。 decimal(3,1)小數點後的意思是「總共3位和1(3)

mysql> select cast('174' as decimal(3,1)); 
+-----------------------------+ 
| cast('174' as decimal(3,1)) | 
+-----------------------------+ 
|      99.9 | 
+-----------------------------+ 
1 row in set, 1 warning (0.00 sec) 

它給出了可以與示出的警告:

mysql> show warnings; 
+---------+------+----------------------------------------------------------------------+ 
| Level | Code | Message                | 
+---------+------+----------------------------------------------------------------------+ 
| Warning | 1264 | Out of range value for column 'cast('174' as decimal(3,1))' at row 1 | 
+---------+------+----------------------------------------------------------------------+ 
1 row in set (0.00 sec) 

除以10,並嘗試數目再次:

mysql> select cast('174'/10 as decimal(3,1)); 
+--------------------------------+ 
| cast('174'/10 as decimal(3,1)) | 
+--------------------------------+ 
|       17.4 | 
+--------------------------------+ 
1 row in set (0.00 sec) 
+0

所以,如果我有我的領域爲整我可以做同樣的分我10再投是正確 – user5313398

+0

是的'「174」/10'隱式注塑VARCHAR到一個int – PerlDuck

+0

?。沒有我的意思,如果該字段是整數例如那麼除以10就是相同的答案吧? – user5313398