34

我有一张像这样的桌子:

id  name
--------
1   clark_009
2   clark_012
3   johny_002
4   johny_010

我需要按以下顺序获得结果:

johny_002
clark_009
johny_010
clark_012

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

4

5 回答 5

67

这将做到这一点,非常简单地选择最右边的 3 个字符并按该值升序排序。

SELECT *
FROM table_name
ORDER BY RIGHT(name, 3) ASC;

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

于 2012-12-05T20:42:18.333 回答
9

你应该试试这个。

SELECT * FROM Table order by SUBSTRING(name, -3);

祝你好运!

于 2012-12-05T20:44:56.410 回答
4

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

select * from table order by substring_index(name, '_', -1)
于 2012-12-05T20:56:05.103 回答
4

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

句法 : SUBSTRING(string,position,length)

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

SELECT * FROM TableName ORDER BY SUBSTRING(FieldName, -3);
#OR
SELECT * FROM TableName ORDER BY SUBSTRING(FieldName, -3,3);

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

SELECT * FROM TableName ORDER BY SUBSTRING(FieldName, 1,3);

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

这是关于 SUBSTRING()函数的详细信息。

于 2017-07-27T09:36:22.017 回答
0

如果您想按名称长度可变的最后三个字符(从左到右)排序,我建议:

SELECT *
FROM TABLE
ORDER BY SUBSTRING (name, LEN(name)-2, 3)

索引从名称 -2 的长度开始,这是倒数第三个字符。

我有点晚了,但遇到了同样的问题,这对我有帮助。

于 2022-01-30T13:11:49.320 回答