mysql按升序或降序选择

时间:2014-08-11 06:56:30

标签: mysql

我的id或主键是,数据类型是VARCHAR(50)

            0.0.01
            0.0.100
            0.0.101
            0.0.1011
            0.0.201
            0.0.501
            0.0.99
            0.0.999
            0.01.0
            0.01.10
            0.02.10
            0.02.20
            0.02.99
            01.0.0
            01.0.99
            01.02.99
            01.03.444
            01.05.88
            10.02.99
            100.100.100
            25.45.1001
            99.99.99

我必须按排序顺序获取它 所以我试过这个

select id from table order by cast(id as decimal) desc;

但它不起作用

预期订单是在运行查询后

            0.0.01
            0.0.99
            0.0.100
            0.0.101
            0.0.201
            0.0.501
            0.0.999
            0.0.1011
            0.01.0
            0.01.10
            0.02.10
            0.02.20
            0.02.99
            01.0.0
            01.0.99
            01.02.99
            01.03.444
            01.05.88
            10.02.99
            25.45.1001
            99.99.99
            100.100.100

我正在使用mysql

2 个答案:

答案 0 :(得分:1)

不是一个更容易的,但你可以对每个小数位使用substring_index

select *
from t
order by 
substring_index(id,'.',1) * 1,
substring_index(substring_index(id,'.',-2),'.',1) * 1,
substring_index(id,'.',-1) * 1

说明

我已经使用了substring_index它会在提供的列中返回字符串片段,就像上面的情况一样,我通过分隔符的出现使用id列,即()例如 0.1.2 之类的字符串,对于3以上的sunstring_index用法将返回如下

  • substring_index('0.1.2','.',1)会将结果显示为0
  • substring_index(substring_index('0.1.2','.',-2),'.',1)会将结果显示为1
  • substring_index('0.1.2','.',-1)会将结果显示为2

对于数字i的类型转换,我将substring_index的结果乘以1,因此按表达式排序的结果将首先按照第一个点之前的数字排序,然后按第二个点之前的数字排序,最后按第二个点之后的数字排序以递增的方式

enter image description here

enter image description here

Demo

来源:

http://www.w3resource.com/mysql/string-functions/mysql-substring_index-function.php

答案 1 :(得分:0)

您的ID列的小数值无效,因此无法在此处投射。

尝试不投射,这应该有效:

select id from table order by id desc;

DEMO