Mysql按数字大小排序String字段
问题是这样的,当我们按由大到小的顺序排序一组数字的时候,它应该如此:
- 9800
- 8000
- 900
但如果是这些数字是以String类型存储的话,直接排序的结果会是这样:
- 9800
- 900
- 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;
得到的结果:
- 9800
- 900
- 8000
解决的方法是,在排序语句里把meta_value转成数字再排序,写作-meta_value
。
如
SELECT meta_value FROM postmeta WHERE meta_key="count" ORDER BY -meta_value ASC;
得到的结果:
- 9800
- 8000
- 900
此时采用的是按meta_value的负值排序,所以如需得到由大到小的效果,需要使用ASC而非DESC。当然也可以直接用--meta_value DESC
。
如
SELECT meta_value FROM postmeta WHERE meta_key="count" ORDER BY --meta_value DESC;
得到的结果一样是:
- 9800
- 8000
- 900
分类:
mySQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)