博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql按数字大小排序String字段
阅读量:6609 次
发布时间:2019-06-24

本文共 705 字,大约阅读时间需要 2 分钟。

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

  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

转载地址:http://wpiso.baihongyu.com/

你可能感兴趣的文章
oracle大型数据库系统在AIX/unix上的实战详解 这本书要二版
查看>>
关于JAVA中的static方法、并发问题以及JAVA运行时内存模型
查看>>
Direct3D 初涉: 颜色
查看>>
jquery的checked以及disabled
查看>>
XLua系统学习
查看>>
Scala提取器Extractor实战详解之Scala学习笔记-19
查看>>
vue--初识
查看>>
<Linux命令行学习 第一节> CentOS在虚拟机的安装
查看>>
MyEclipse(Eclipse)快捷键大全
查看>>
Vue.js(一)了解Vue
查看>>
** 不在 sudoers 文件中。此事将被报告。
查看>>
Python range() 函数
查看>>
react-踩坑记录——swiper报错!
查看>>
node 和npm 版本更新
查看>>
无Paper不论文
查看>>
004 ps基础裁剪照片,制作大头贴
查看>>
gtid环境下mysqldump对于set-gtid-purged的取值
查看>>
最好吃的水果是猕猴桃
查看>>
Kerberos和NTLM - SQL Server
查看>>
错误信息输出,重定向到文件
查看>>