为什么mysql没有返回varchar float的正确顺序?
我有一列version
这是varchar
但包含double
值。 当我尝试获取最新(最大)版本时,我得到不正确的结果。但是当我分钟时,我得到正确的结果。为什么mysql没有返回varchar float的正确顺序?
如何确定包含double的varchar列的顺序?
这里是我的表的内容;
mysql> Desc Application;
+---------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+------------------+------+-----+---------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| version | varchar(50) | YES | | NULL | |
+---------+------------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)
mysql> select * from Application;
+----+---------+
| id | version |
+----+---------+
| 1 | 0.0.0 |
| 2 | 0.0.1 |
| 3 | 0.0.2 |
| 4 | 0.1.0 |
| 5 | 0.1.1 |
| 6 | 0.1.2 |
| 7 | 1.0.0 |
| 8 | 1.0.1 |
| 9 | 1.1.1 |
| 10 | 8.7.3 |
| 11 | 10.29.0 |
+----+---------+
11 rows in set (0.00 sec)
select max(version) from application;
+--------------+
| max(version) |
+--------------+
| 8.7.3 |
+--------------+
1 row in set (0.00 sec)
mysql> select version from application
-> ORDER BY version DESC
-> LIMIT 1;
+---------+
| version |
+---------+
| 8.7.3 |
+---------+
1 row in set (0.00 sec)
mysql> select min(version) from application;
+--------------+
| min(version) |
+--------------+
| 0.0.0 |
+--------------+
1 row in set (0.00 sec)
忘记这些是浮动的想法。 MySQl将它们视为字符串,因为这就是你所说的。
排序方式字符 order,8
是最大的,0
是最小值,所以你的结果是正确的。
如果您希望MySQL按数字顺序排序,请给它数字字段。或者,右对齐和零填充您的子字段 - 08.07.03
小于10.29.00
没问题。是否有一个内置的函数在SQL中可以采取varchar并返回浮点值? – 2015-03-31 20:50:25
MySQL通常会强制任何需要的,如果需要的话,你可以用CAST或CONVERT来强制这个问题,但是这些仍然不是浮动的。数字最多只有一个小数点。 – 2015-03-31 21:35:46
varchar只能包含字符串。在varchar中没有“double values”这样的东西。 – BWS 2015-03-31 20:48:48