我必须按版本列对表进行排序,版本列是随机字符串 + 数字 (x.xx.xx)。例如,我的表如下所示:
string 1.14.2
string 1.14.1
string 1.14
string 1.14.3
string 1.14.4
string 1.11
string 1.10
string 1.10.2
string 1.9
string 1.9.4
string 1.9.2
string 1.8
string 1.8.8
string 1.4.6
我的结果必须如下所示:
string 1.14.4
string 1.14.3
string 1.14.2
string 1.14.1
string 1.11
string 1.10.2
string 1.10
string 1.9.4
string 1.9.2
string 1.9
string 1.8.8
string 1.8
string 1.4.6
我现在的sql是
SELECT * FROM t_plugins WHERE a_category = 'string' AND a_master_ig = 2
ORDER BY SUBSTRING_INDEX(SUBSTRING_INDEX(trim(a_name), " ", -1), ".", -1)```
最佳答案
像这样的东西应该可以工作:
order by
cast(
substring_index(
substring_index(a_name, ' ', -1),
'.',
1
)
as unsigned
) desc,
cast(
right(
substring_index(a_name, ' ', -1),
length(substring_index(a_name, ' ', -1))
- locate('.', substring_index(a_name, ' ', -1))
)
as decimal(10, 5)
) desc
这个想法是:
将字符串与版本号分开
隔离版本号的第一位数字(并将其转换为整数值)并将其用作第一个排序标准
然后分离第二部分和第三部分,将其转换为十进制值,并将其用作第二个排序标准
| a_name | | :------------ | | string 1.14.4 | | string 1.14.3 | | string 1.14.2 | | string 1.14.1 | | string 1.14 | | string 1.11 | | string 1.10.2 | | string 1.10 | | string 1.9.4 | | string 1.9.2 | | string 1.9 | | string 1.8.8 | | string 1.8 | | string 1.4.6 |
关于mysql - SQL 排序版本数字 + 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58965266/