2016-06-07 43 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