2015-03-31 69 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

相關問題