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
  • 16965

mysql 对varchar型数字排序

字段pageNum 1,6,9,11   希望排序顺序为1,6,9,11 但是实际排序为1,11,6,9   后来发现是因为pageNum这个字段是varchar类型的不是int型,所以排...
  • qvbfndcwy
  • qvbfndcwy
  • 2013年02月07日 14:13
  • 2332

mysql 中文排序 数字排序

中文排序: order by convert(field using gbk) 数字排序: order by field*1
  • yehaifanxing
  • yehaifanxing
  • 2017年08月28日 13:23
  • 467

n个数字排序

  • 2012年08月23日 18:20
  • 749B
  • 下载

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

转自:http://www.cnblogs.com/codefly-sun/p/5898738.html mysql数值字符串类型的按照数值进行排序 今天遇到一个问题,就是对mysql数值字...
  • omayyouhappy
  • omayyouhappy
  • 2017年07月20日 08:54
  • 1472

Mysql的varchar排序按照数字顺序

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

mysql数据排序输出

最近找工作,就看看了一些关于数据查询的语句,做个笔记 表结构: 一:升序:select  accou,name from test order by account asc; 二、降序:sel...
  • wxj_csdn
  • wxj_csdn
  • 2016年10月14日 23:54
  • 67

MySQL中百分数生成和排序

问题描述 最近在开发APP的一个报表后台,使用的是MySQL数据库,遇到一个很郁闷的问题就是MySQL对百分比排序的处理,之前的报表都是在Oracle当中,从来没纠结过百分比怎么处理。在MySql中百...
  • dzy21
  • dzy21
  • 2016年08月04日 18:30
  • 2032

排序字段不要用varchar类型

排序字段使用 number 类型
  • u013766398
  • u013766398
  • 2016年11月30日 10:27
  • 312

varchar排序

自己建表的时候,把一个字段类型创建为varchar(2) ,其实应该建为int(2)的。因为我只允许输出数字。这本来也没什么,无非就是占点空间,懒得改了。但是今天在后台发现排序有问题。于是,没办法,改...
  • haizhongyun
  • haizhongyun
  • 2012年04月12日 16:39
  • 649
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Mysql的varchar排序按照数字顺序
举报原因:
原因补充:

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