需求:
在实际项目需求中可能会遇到这种情况:需要从数据库中获取某些数据,然后在前端通过列表的形式展现出来,但是展现的列表需要根据某个字段进行排序,而这个字段的内容又是由字符和数字组合而成的,那么应该如何根据数字进行排序呢?
思路一:
从数据库获取数据的同时通过order by来控制需要排序的字段,这样会默认根据数字进行排序,但是存在的问题是会先取数字的第一位按从大到小进行排序,然后取第二位进行排序,以此类推,排序效果(1,10,20.....2,20,21...),即不是比较整体数字的大小进行排序的。
那么如何解决呢?因为相同位数的数字排序是正常的,我们需要解决的是不同位数的数字排序,因此我们先按照数字的长度进行排序后再按照数字大小进行排序就可以了。即:select * from 表名 order by length(要排序的字段) 要排序的段
例:select * from user order by length(name) name;
思路二:
出现第一种情况的原因是因为排序的对象类型是字符串,如果是对数字进行排序的话就可以按照真实的数字大小进行排序了。
因此我们需要将字符和数字混合的字段中的数字部分截取出来,然后转换成数字类型再进行排序就可以了。
即:select * from 表名 order by cast(substr(字段名,截取的长度) as number) 【cast函数是类型转换函数,substr是字符串截取函数】
例:select * from user order by cast(substr(name, 5) as number);
注意:上述SQL语句是在Oracle数据库测试的,其它数据库函数写法或有不同。
------扫码进群,怕你禁不住福利的诱惑------