当前位置:Gxlcms > 数据库问题 > Mysql数据库按照varchar字符串类型排序和按照int整型类型排序的区别和注意点及解决方案

Mysql数据库按照varchar字符串类型排序和按照int整型类型排序的区别和注意点及解决方案

时间:2021-07-01 10:21:17 帮助过:54人阅读

 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;

也可以使用CONVERT来搞定此问题:

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


本文出自 “高山” 博客,转载请与作者联系!

Mysql数据库按照varchar字符串类型排序和按照int整型类型排序的区别和注意点及解决方案

标签:mysql按照varchar字符串类型排序出错

人气教程排行