按最后3个字符排序

Jus*_*air 22 mysql

我有一张桌子:

id  name
--------
1   clark_009
2   clark_012
3   johny_002
4   johny_010
Run Code Online (Sandbox Code Playgroud)

我需要按此顺序获得结果:

johny_002
clark_009
johny_010
clark_012
Run Code Online (Sandbox Code Playgroud)

不要问我已经尝试过什么,我不知道该怎么做.

Ste*_*ley 45

这样做,非常简单地选择最右边的3个字符并按该值递增排序.

SELECT *
FROM table_name
ORDER BY RIGHT(name, 3) ASC;
Run Code Online (Sandbox Code Playgroud)

应该补充的是,随着数据的增长,这将成为一种效率低下的解决方案.最后,您可能希望将数字附录存储在单独的索引整数列中,以便排序效率最佳.

  • `RIGHT`做的确实是正确的东西:)似乎我只是监督它,谢谢! (3认同)
  • 您可能也想要RTRIM以防万一:`ORDER BY RIGHT(RTRIM(名称),3 ASC;` (2认同)

Mar*_*ara 8

你应该试试这个.

SELECT * FROM Table order by SUBSTRING(name, -3);
Run Code Online (Sandbox Code Playgroud)

祝好运!


Sum*_*ker 6

您可以使用MySQLSUBSTRING()函数按子字符串排序

句法 : SUBSTRING(string,position,length)

示例:按字符串的最后 3 个字符排序

SELECT * FROM TableName ORDER BY SUBSTRING(FieldName, -3);
#OR
SELECT * FROM TableName ORDER BY SUBSTRING(FieldName, -3,3);
Run Code Online (Sandbox Code Playgroud)

示例:按字符串的前 3 个字符排序

SELECT * FROM TableName ORDER BY SUBSTRING(FieldName, 1,3);
Run Code Online (Sandbox Code Playgroud)

注意: Positive位置/索引从字符串的从左到右开始,Negative位置/索引从字符串的右到左开始。

以下是有关SUBSTRING()函数的详细信息 。


小智 5

您可以应用 substring_index 函数来解析这些值 -

select * from table order by substring_index(name, '_', -1)
Run Code Online (Sandbox Code Playgroud)