Mysql的varchar排序按照数字顺序

转载 2016年06月02日 09:56:48

自己建表的时候,把一个字段类型创建为varchar(2) ,其实应该建为int(2)的。因为我只允许输出数字。这本来也没什么,无非就是占点空间,懒得改了。但是今天在后台发现排序有问题。于是,没办法,改之。下面简单说一下MySQL的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;

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

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

相关文章推荐

Mysql按数字大小排序String字段

Mysql按数字大小排序String字段标题有点难以理解,事实是我不知道怎样用一句话来描述此种情形。问题是这样的,当我们按由大到小的顺序排序一组数字的时候,它应该如此:98008000900但如果是这...
  • imzkz
  • imzkz
  • 2010年06月23日 11:12
  • 15880

mysql 对varchar型数字排序

字段pageNum 1,6,9,11   希望排序顺序为1,6,9,11 但是实际排序为1,11,6,9   后来发现是因为pageNum这个字段是varchar类型的不是int型,所以排...

mysql将字符串字段转为数字排序或比大小

mysql里面有个坑就是,有时按照某个字段的大小排序(或是比大小)发现排序有点错乱。后来才发现,是我们想当然地把对字符串字段当成数字并按照其大小排序(或是比大小),结果肯定不会是你想要的结果。 这时...

MYSQL数据库字母数字混合字段排序问题

对MySQL数据表里的一个字符型字段排序,其内容格式为一位字母+顺序数字。数字没有前导零,长度不固定。 这种含字母的数字序列,排序出来的结果和我们想要的结果是不一样的,因为它不是纯数字,只能按字符规...

mysql 字符串转数字再排序

如果数字是按照字符串格式存储的排序时候又想按照数字排血  只需要在order by后加上转换函数即可例如: order by  CONVERT(sort,DECIMAL) 可用的类型      ...

mysql进阶(八)怎么对varchar类型排序问题

MySQL中怎么对varchar类型排序问题 asc 升级 desc降序 在mysql默认order by 只对数字与日期类型可以排序,但对于varchar字符型类型排序好像没有用了,下面我来给...

MYSQL varchar 类型 排序错乱问题的解决

鸣谢:http://www.cnblogs.com/confusing/archive/2011/03/28/1997541.html 扩展:http://blog.sina.com.cn/s/bl...
  • Hollboy
  • Hollboy
  • 2013年10月28日 16:59
  • 1481

varchar排序

自己建表的时候,把一个字段类型创建为varchar(2) ,其实应该建为int(2)的。因为我只允许输出数字。这本来也没什么,无非就是占点空间,懒得改了。但是今天在后台发现排序有问题。于是,没办法,改...

排序字段不要用varchar类型

排序字段使用 number 类型

mysql 字符串里面的数字,按照大小排序

转自:http://www.cnblogs.com/codefly-sun/p/5898738.html mysql数值字符串类型的按照数值进行排序 今天遇到一个问题,就是对mysql数值字...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Mysql的varchar排序按照数字顺序
举报原因:
原因补充:

(最多只允许输入30个字)