2016-06-07 3 views
0

Я получил поле varchar, скажем, значение 174, но когда я cast(field as decimal(3,1)), он всегда мне 99,9? Как я могу преобразовать его в 17.4? Или я должен изменить на исходном уровне вход для ввода в десятичном виде?Mysql cast to decimal дать 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 к междунар – PerlDuck

+0

?.. Нет, что я имел в виду, если поле является целым числом, например. 174 затем разделить на 10 - это тот же самый ответ? – user5313398