今天在做mysql字段排序的时候无意间发现的一个问题:如果表中的字段是String类型的数字,直接使用ORDER BY DESC或者ORDER BY ASC 进行排序时,会出现无法正常排序的问题。
查阅相关资料发现一个解决方案:将string类型转为数字类型再进行排序,比如你表中的排序字段order_id为string类型,此时你需要将查询结果按order_id进行降序排序,你可以这么写
SELECT * FROM table_name ORDER BY -order_id;
或者你需要将查询结果按order_id进行升序排序
SELECT * FROM table_name ORDER BY --order_id;
但是具体到项目中又会出现一些问题,项目中对于mysql数据库的操作使用的都是LambdaQueryWrapper,LambdaQueryWrapper的确有个orderByAsc和orderByDesc的操作,但是这两个操作准确来说只能针对被排序字段是数字类型的情况,向上述情况直接使用可能会出现排序后结果不准确。
于是我就想到直接在mapper层使用@Select注解进行查询,如下:
显然这是根据sort字段进行降序查询,测试过了没有问题,但当我想进行升序排序的时候又出现了问题:
不难发现,--sort 变成了灰色字体,这里盲猜一下,可能是@Select注解里面的sql语法问题,--sort似乎被注释掉了,于是我便去测试了一下,果然报了sql语法错误。
那么问题来了,降序查询可以实现,那么升序查询该怎么办呢?
经过几次测试后,我发现一种写法,可以实现升序查询:
这种写法类似于负负得正的效果,-sort 为降序,desc也为降序,于是在-sort的结尾再加上desc就实现了升序查询效果,是不是很有意思?
以上就是我在做mysql中string类型的数字排序出现的问题以及解决方案,希望可以帮助到大家。