【发布时间】:2016-06-07 17:42:55
【问题描述】:
我有一个 varchar 字段说值是 174,但是当我 cast(field as decimal(3,1)) 时它总是给我 99.9?如何将其转换为 17.4?或者我必须在源级别更改输入以十进制本身输入吗?
【问题讨论】:
我有一个 varchar 字段说值是 174,但是当我 cast(field as decimal(3,1)) 时它总是给我 99.9?如何将其转换为 17.4?或者我必须在源级别更改输入以十进制本身输入吗?
【问题讨论】:
这是因为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)
【讨论】:
'174'/10 隐式地将 varchar 转换为 int。
select cast(174/10 as decimal(3,1)); 给 17.4。您只需确保 174/10 的结果实际上 适合 到 decimal(3,1)。