基本上,我在MySQL表中记录了我的软件的更新历史记录。当我输出这些数据时,我希望数据按软件版本降序排序,即先输出最新的版本更新信息。
我使用以下查询:
SELECT * FROM updates WHERE productId='$productId' ORDER BY version DESC
关于以下测试数据:
1.0.0
0.9.8
2.4.2
1.7.0
1.7.1
17.2.1
输出结果为:
2.4.2
17.2.1
1.7.1
1.7.0
1.0.0
0.9.8
由于数据中的2'小数点',我无法将其作为double,float等存储在表中。因此存储为varchar。
我尝试将ORDER BY version+0 DESC
放入查询中,这会将17.2.1
移到列表顶部,但会将1.7.0
移到1.7.1
之上,因为投放会中断当它到达第二个小数点时,只是按表的顺序输出数据。
有关如何对数据进行排序的任何建议,以便将其显示为:
17.2.1
2.4.2
1.7.1
1.7.0
1.0.0
0.9.8
干杯!
答案 0 :(得分:1)
select * from Table1
order by CAST(version AS DECIMAL) DESC;
<强> fiddle 强>
答案 1 :(得分:1)
SELECT * FROM Table1 ORDER BY inet_aton(version);
答案 2 :(得分:1)
SELECT VERSION,
CAST(SUBSTRING_INDEX(VERSION,'.',1) AS UNSIGNED) v1,
CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(VERSION,'.',2),'.',-1) AS UNSIGNED) v2,
CAST(SUBSTRING_INDEX(VERSION,'.',-1) AS UNSIGNED) v3
FROM UPDATES
ORDER BY v1 DESC, v2 DESC, v3 DESC
答案 3 :(得分:1)
这将有效
select * from Table1
order by CAST(SUBSTRING_INDEX(version, '.', 1) as DECIMAL) DESC,
CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(version, '.', 2), '.', -1) as DECIMAL DESC,
CAST(SUBSTRING_INDEX(version, '.', -1) as DECIMAL) DESC;
答案 4 :(得分:0)
不是ORDER BY版本,但是:
提取数字直到完全停止并按第一个数字,第二个和第三个排序
像这样:ORDER BY firstVersionNumber, secondVersionNumber, thirdVersionNumber.
提取数字使用字符串函数