2015-03-31 70 views
0

我有一列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) 
+0

varchar只能包含字符串。在varchar中没有“double values”这样的东西。 – BWS 2015-03-31 20:48:48

回答

4

忘记这些是浮动的想法。 MySQl将它们视为字符串,因为这就是你所说的。

排序方式字符 order,8是最大的,0是最小值,所以你的结果是正确的。

如果您希望MySQL按数字顺序排序,请给它数字字段。或者,右对齐和零填充您的子字段 - 08.07.03小于10.29.00

+0

没问题。是否有一个内置的函数在SQL中可以采取varchar并返回浮点值? – 2015-03-31 20:50:25

+0

MySQL通常会强制任何需要的,如果需要的话,你可以用CAST或CONVERT来强制这个问题,但是这些仍然不是浮动的。数字最多只有一个小数点。 – 2015-03-31 21:35:46

相关问题