我的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
答案 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,因此按表达式排序的结果将首先按照第一个点之前的数字排序,然后按第二个点之前的数字排序,最后按第二个点之后的数字排序以递增的方式
Demo
来源:
http://www.w3resource.com/mysql/string-functions/mysql-substring_index-function.php
答案 1 :(得分:0)