有人问道比如数据表中有字段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测试通过
本文介绍了一种在MySQL中实现特定数字排序的方法。当字段包含数字但被字符包裹时,使用SUBSTRING结合类型转换来正确排序。此方法适用于版本4.1.18。
928

被折叠的 条评论
为什么被折叠?



