mysql中欄位型別轉換排序

2021-05-28 09:23:13 字數 2118 閱讀 2379

表中字段server_id是varchar型別,現在我們查詢資料時想以server_id排一下序,排序後的結果:

select server_id from cardserver where game_id = 1 order by server_id desc limit 10;

+-----------+

| server_id |

+-----------+

| 8         |

| 7         |

| 6         |

| 5         |

| 4         |

| 3         |

| 2         |

| 10        |

| 1         |

+-----------+

很明顯,我們想要的結果應該是 10,8,7,6,5 這樣的。但是這個10排在了2的後面。按照字串來排的。其實我們是想把它當做數值來排。

手動轉換型別:

用下面的方法就可以了,使server_id+0之後再排序,問題解決了。

select server_id from cardserver where game_id = 1 order by server_id+0 desc limit 10;

+-----------+

| server_id |

+-----------+

| 10        |

| 8         |

| 7         |

| 6         |

| 5         |

| 4         |

| 3         |

| 2         |

| 1         |

+-----------+

使用mysql函式cast/convert:

mysql為我們提供了兩個型別轉換函式:cast和convert,現成的東西我們怎能放過?

cast() 和convert() 函式可用來獲取乙個型別的值,並產生另乙個型別的值。

這個型別 可以是以下值其中的 乙個:

binary[(n)]

char[(n)]

date

datetime

decimal

signed [integer]

time

unsigned [integer]

所以我們也可以用cast解決問題:

select server_id from cardserver where game_id = 1 order by cast(server_id as signed) desc limit 10;

+-----------+

| server_id |

+-----------+

| 10        |

| 8         |

| 7         |

| 6         |

| 5         |

| 4         |

| 3         |

| 2         |

| 1         |

+-----------+

也可以使用convert來搞定此問題:

select server_id from cardserver where game_id = 1 order by convert(server_id,signed) desc limit 10;

+-----------+

| server_id |

+-----------+

| 10        |

| 8         |

| 7         |

| 6         |

| 5         |

| 4         |

| 3         |

| 2         |

| 1         |

+-----------+

mysql中欄位型別轉換排序

size medium 表中字段server id是varchar型別,現在我們查詢資料時想以server id排一下序,排序後的結果 select server id from cardserver where game id 1 order by server id desc limit 10 ...

MYSQL 排序中的字段型別轉換

欄位server id是varchar型別,查詢時以server id排序,排序結果有問題?select server id from cardserver where game id 1order by server id desc limit 10 原因是 資料庫根據字串排序,10也排在9之後了...

mysql 查詢varchar型別字段排序

首先,如果裡面存的是字母,會按 英文本母 順序排序,如果含有數字,按數字大小排序,如果含有漢字,按照所選擇的 漢字編碼 排序。一般情況下,int型別的字段可以直接使用max 函式查詢出某一列的最大值,但是對於varchar型的字段,我們有的時候需要排序或查最大值,直接用max 函式查最大值,會發現值...