带前缀的MySQL排序数字

带前缀的MySQL排序数字,mysql,Mysql,我在数据库中有一个名为“mark”的字段,其中包含以下数据: P-9 R-12 R-10 P-10 P-11 R-11 R-9 R-8 P-12 P-8 ... 前缀最多可在数字前4个字符 预期产出: P-8 P-9 P-10 P-11 P-12 R-8 R-9 R-10 R-11 R-12 .... 到目前为止,我已经: ORDER BY CAST(mark AS UNSIGNED), mark ASC 这似乎几乎可以正常工作,但它不能正确排序小于10的数字。尝试以下方法:使用您可以按所

我在数据库中有一个名为“mark”的字段,其中包含以下数据:

P-9
R-12
R-10
P-10
P-11
R-11
R-9
R-8
P-12
P-8
...
前缀最多可在数字前4个字符

预期产出:

P-8
P-9
P-10
P-11
P-12
R-8
R-9
R-10
R-11
R-12
....
到目前为止,我已经:

ORDER BY CAST(mark AS UNSIGNED), mark ASC

这似乎几乎可以正常工作,但它不能正确排序小于10的数字。

尝试以下方法:使用您可以按所需方式排序的方法

ORDER BY LEFT(Marks,1),CAST(RIGHT(Marks,len(Marks)-2) AS INT)

试试这个:使用可以按要求方式排序的方法

ORDER BY LEFT(Marks,1),CAST(RIGHT(Marks,len(Marks)-2) AS INT)
用这个,

order by substring(mark,1,locate('-',mark)+1), cast(substring(mark,locate('-',mark)+1) as unsigned) asc
用这个,

order by substring(mark,1,locate('-',mark)+1), cast(substring(mark,locate('-',mark)+1) as unsigned) asc

带有
子字符串的My变体(代码,定位('-',代码)+1)


带有
子字符串的My变体(代码,定位('-',代码)+1)



您好,我试过了,但它没有按正确的顺序排列前缀。您更新的答案几乎有效,但小于10的数字将放在末尾。示例:P-23>P-24>P-8>P-9谢谢,我将INT改为UNSIGNED,在我的例子中它是有效的。“按左排序(标记,1),按右排序(标记,长度(标记)-2)为无符号)”我认为条件
前缀最多可以在数字前4个字符。
在这里不起作用。您好,我已经尝试过了,但它没有按正确的顺序排序前缀。您更新的答案几乎有效,但数字<10将放在末尾。示例:P-23>P-24>P-8>P-9谢谢,我将INT改为UNSIGNED,在我的例子中它是有效的。“ORDER BY LEFT(mark,1),CAST(RIGHT(mark,length(mark)-2)AS UNSIGNED)”我认为条件
前缀最多可以在数字前4个字符。
在这里不起作用。与上面一样,它将数字放在@PanDistricted Try Now。与上面一样,它将数字放在@PanDistricted Try Now。我添加了
LEFT(code,LOCATE('-',code)-1)
。请再次检查。相同的问题,似乎只按数字排序。示例:P-8、R-8、P-9、R-9尝试更改
order BY
=>
order BY LEFT(code,LOCATE('-',code)-1)、CAST(子字符串(code,LOCATE('-',code)+1)中的顺序(code),LOCATE('-',code)+1)为无符号)
我添加了
LEFT(code,LOCATE('-',code)-1)
。请再次检查。相同的问题,似乎只按数字排序。示例:P-8、R-8、P-9、R-9尝试更改
order BY
=>
order BY LEFT(code,LOCATE('-',code)-1)、CAST(SUBSTRING(code,LOCATE('-',code)+1)中的顺序(无符号)
我强烈建议您将前缀与数字分开存储。我强烈建议您将前缀与数字分开存储。