1

基本上,我在 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 个“小数点”,我无法将其以双精度、浮点等形式存储在表中,因此存储为 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

干杯!

4

5 回答 5

1
select * from Table1
order by CAST(version  AS DECIMAL) DESC;

小提琴

于 2013-10-04T08:56:54.580 回答
1

SELECT * FROM Table1 ORDER BY inet_aton(version);

于 2013-10-04T09:08:06.757 回答
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
于 2013-10-04T09:09:12.703 回答
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;

检查小提琴

于 2013-10-04T09:11:26.673 回答
0

不是 ORDER BY 版本,而是:

提取数字直到句号并按第一个数字、第二个和第三个数字排序

像这样:

ORDER BY firstVersionNumber, secondVersionNumber, thirdVersionNumber.

提取数字使用字符串函数

于 2013-10-04T08:54:18.567 回答