I have a table like:
id name
--------
1 clark_009
2 clark_012
3 johny_002
4 johny_010
I need to get results in this order:
You may apply substring_index function to parse these values -
select * from table order by substring_index(name, '_', -1)
you should try this.
SELECT * FROM Table order by SUBSTRING(name, -3);
good luck!
You can use MySQL SUBSTRING()
function to sort by substring
Syntax :
SUBSTRING(string,position,length)
Example : Sort by last 3 characters of a String
SELECT * FROM TableName ORDER BY SUBSTRING(FieldName, -3);
#OR
SELECT * FROM TableName ORDER BY SUBSTRING(FieldName, -3,3);
Example : Sort by first 3 characters of a String
SELECT * FROM TableName ORDER BY SUBSTRING(FieldName, 1,3);
Note :
Positive
Position/Index start from Left to Right andNegative
Position/Index start from Right to Left of the String.
Here is the details about SUBSTRING() function.
This will do it, very simply selecting the right-most 3 characters and ordering by that value ascending.
SELECT *
FROM table_name
ORDER BY RIGHT(name, 3) ASC;
It should be added that as your data grows, this will become an inefficient solution. Eventually, you'll probably want to store the numeric appendix in a separate, indexed integer column, so that sorting will be optimally efficient.