mysql中String类型数字排序问题(sql语句 + @Select注解实现)

        今天在做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类型的数字排序出现的问题以及解决方案,希望可以帮助到大家。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值