Mysql按数字大小排序String字段

 问题是这样的,当我们按由大到小的顺序排序一组数字的时候,它应该如此:

  1. 9800
  2. 8000
  3. 900

但如果是这些数字是以String类型存储的话,直接排序的结果会是这样:

  1. 9800
  2. 900
  3. 8000

当然多数情况下我们会把数字存储为数字型,就可避免这一问题。但还是有一些情形,数字被存储为String。

比如wordpress的postmetas表,它的meta_value已经固定了就是String。当我们需要把meta_value按数字大小排序的时候,直接写order by meta_value就不能达到我们所需要的目的。

SELECT meta_value FROM postmeta WHERE meta_key="count" ORDER BY meta_value DESC;
得到的结果:

  1. 9800
  2. 900
  3. 8000

解决的方法是,在排序语句里把meta_value转成数字再排序,写作-meta_value

SELECT meta_value FROM postmeta WHERE meta_key="count" ORDER BY -meta_value ASC;
得到的结果:

  1. 9800
  2. 8000
  3. 900

此时采用的是按meta_value的负值排序,所以如需得到由大到小的效果,需要使用ASC而非DESC。当然也可以直接用--meta_value DESC

SELECT meta_value FROM postmeta WHERE meta_key="count" ORDER BY --meta_value DESC;
得到的结果一样是:

    1. 9800
    2. 8000
    3. 900
posted @   海乐学习  阅读(1532)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示