有人问道比如数据表中有字段sortid,分别有a1到a29的字符,如果查询时加入"order by sortid",排序会是a1,a10,a11...a19,a2,..a29,a3,a4...a9这样的
怎样可以让它以a1,a2,a3....a28,a29这样排序输出呢?
下面建一个测试用表
CREATE TABLE `test_njj` (
`id` int(10) NOT NULL auto_increment,
`sortid` varchar(20) NOT NULL,
`user_id` int(10) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我们只需用mysql内建函数
select
怎样可以让它以a1,a2,a3....a28,a29这样排序输出呢?
下面建一个测试用表
CREATE TABLE `test_njj` (
`id` int(10) NOT NULL auto_increment,
`sortid` varchar(20) NOT NULL,
`user_id` int(10) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我们只需用mysql内建函数
SUBSTRING(str,pos)
拆分sortid就可以了
select
SUBSTRING(sorid,2) from test_njj
可以看到已经把a过滤掉了,但是排序仍然不对,因为这时拆分的数字虽然是数字,但仍被认为是字符串,所以有必要转换成数字,让
SUBSTRING(sorid,2)*1即可
所以用
select * from test_njj order by SUBSTRING(sortid,2)*1;
即可。
以上在mysql4.1.18测试通过