数据库查询之对含有数字和字母的字段进行排序

需求:

在实际项目需求中可能会遇到这种状况:须要从数据库中获取某些数据,而后在前端经过列表的形式展示出来,可是展示的列表须要根据某个字段进行排序,而这个字段的内容又是由字符和数字组合而成的,那么应该如何根据数字进行排序呢?前端

思路一:

从数据库获取数据的同时经过order by来控制须要排序的字段,这样会默认根据数字进行排序,可是存在的问题是会先取数字的第一位按从大到小进行排序,而后取第二位进行排序,以此类推,排序效果(1,10,20.....2,20,21...),即不是比较总体数字的大小进行排序的。数据库

那么如何解决呢?由于相同位数的数字排序是正常的,咱们须要解决的是不一样位数的数字排序,所以咱们先按照数字的长度进行排序后再按照数字大小进行排序就能够了。即:select * from 表名 order by length(要排序的字段) 要排序的段函数

例:select * from user order by length(name) name;测试

思路二:

出现第一种状况的缘由是由于排序的对象类型是字符串,若是是对数字进行排序的话就能够按照真实的数字大小进行排序了。spa

所以咱们须要将字符和数字混合的字段中的数字部分截取出来,而后转换成数字类型再进行排序就能够了。对象

即:select * from 表名 order by cast(substr(字段名,截取的长度) as number)   【cast函数是类型转换函数,substr是字符串截取函数】排序

例:select * from user order by cast(substr(name, 5) as number);字符串

注意:上述SQL语句是在Oracle数据库测试的,其它数据库函数写法或有不一样。 ast