这可能是更好再添列与用户的位置,然后按该列排序。但是,如果你不能改变你的表结构,这样的查询应该以正确的顺序返回各行:
SELECT
tablename.*
FROM
tablename
ORDER BY
SUBSTR(user,
LEAST(
CASE WHEN LOCATE('0', user)>0 THEN LOCATE('0', user) ELSE LENGTH(user) END,
CASE WHEN LOCATE('1', user)>0 THEN LOCATE('1', user) ELSE LENGTH(user) END,
CASE WHEN LOCATE('2', user)>0 THEN LOCATE('2', user) ELSE LENGTH(user) END,
CASE WHEN LOCATE('3', user)>0 THEN LOCATE('3', user) ELSE LENGTH(user) END,
CASE WHEN LOCATE('4', user)>0 THEN LOCATE('4', user) ELSE LENGTH(user) END,
CASE WHEN LOCATE('5', user)>0 THEN LOCATE('5', user) ELSE LENGTH(user) END,
CASE WHEN LOCATE('6', user)>0 THEN LOCATE('6', user) ELSE LENGTH(user) END,
CASE WHEN LOCATE('7', user)>0 THEN LOCATE('7', user) ELSE LENGTH(user) END,
CASE WHEN LOCATE('8', user)>0 THEN LOCATE('8', user) ELSE LENGTH(user) END,
CASE WHEN LOCATE('9', user)>0 THEN LOCATE('9', user) ELSE LENGTH(user) END
)) + 0
请参阅小提琴here。
是所有的字段都包含'用户',然后是一个数字? –
ORDER BY user + 0; – Strawberry
否Saharsh Shah –