在mysql中查找最后一个字母数字值
我在mysql数据库中有一个包含用户名的字段 例如: 如果我按该字段在mysql中查找最后一个字母数字值,sql,mysql,sql-order-by,Sql,Mysql,Sql Order By,我在mysql数据库中有一个包含用户名的字段 例如: 如果我按该字段DESC订购,我会得到: johndoe3 johndoe2 johndoe10 我需要得到: johndoe10 johndoe3 johndoe2 任何帮助感谢 < P>如果性能不是一个问题,考虑写一个,然后简单地包含在你的命令中的调用。< /P> SELECT * FROM MyTable ORDER BY CAST(strip_alpha(UserName) as int) DESC 对于一
DESC
订购,我会得到:
johndoe3
johndoe2
johndoe10
我需要得到:
johndoe10
johndoe3
johndoe2
<>任何帮助感谢 < P>如果性能不是一个问题,考虑写一个,然后简单地包含在你的命令中的调用。< /P>
SELECT *
FROM MyTable
ORDER BY
CAST(strip_alpha(UserName) as int) DESC
<>对于一个更高性能和无麻烦的解决方案,考虑将用户名中的数字提取到一个新的列中。然后,您可以通过以下方式轻松订购:
SELECT *
FROM MyTable
WHERE UserName LIKE 'johndoe%'
ORDER BY TrailingDigit DESC
如果性能不是一个问题,考虑写A,然后简单地把你的订单中的调用包含在内。
SELECT *
FROM MyTable
ORDER BY
CAST(strip_alpha(UserName) as int) DESC
<>对于一个更高性能和无麻烦的解决方案,考虑将用户名中的数字提取到一个新的列中。然后,您可以通过以下方式轻松订购:
SELECT *
FROM MyTable
WHERE UserName LIKE 'johndoe%'
ORDER BY TrailingDigit DESC
这是一个巨大的黑客,但我认为会奏效。如果您的列名为s:
order by
(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(s, '0', ''), '1', ''), '2', ''), '3', ''), '4', ''), '5', ''), '6', ''), '7', ''), '8', ''), '9', ''),
length(s) desc,
s desc
首先按文本的字母部分进行排序,将所有相同的名称放在一起,然后按长度大致按数字排序,然后按s排序。最后一个按s排序的
现在可以正常工作了,因为它只用于消除相同数字的相同名称之间的歧义。这是一个巨大的黑客攻击,但我认为会奏效。如果您的列名为s:
order by
(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(s, '0', ''), '1', ''), '2', ''), '3', ''), '4', ''), '5', ''), '6', ''), '7', ''), '8', ''), '9', ''),
length(s) desc,
s desc
首先按文本的字母部分进行排序,将所有相同的名称放在一起,然后按长度大致按数字排序,然后按s排序。最后一个按s排序的现在可以正常工作,因为它只用于消除具有相同位数的相同名称之间的歧义。您当前使用的字符编码和排序规则是什么?没有控制字符将字符串与数字分开,要可靠地检索用于排序的数值是非常困难的。IE:RIGHT(字段,1)
将返回“0”而不是“10”…您不能填充这些数字(例如:johndoe2变为johndoe2)?或者将它们存储在不同的列中?@NullUserException:那么当您在100年代、1000年代等获得#时,您必须重新访问填充。MySQL支持正则表达式,但它非常有限-没有正则表达式子字符串可以完成这一短时间的工作。@OMG,只需填充到您熟悉的大小。您当前使用的字符编码和排序规则是什么?如果没有将字符串与数字分隔的控制字符,则很难可靠地检索数字值进行排序。IE:RIGHT(字段,1)
将返回“0”而不是“10”…您不能填充这些数字(例如:johndoe2变为johndoe2)?或者将它们存储在不同的列中?@NullUserException:然后当你在100年代、1000年代等获得#时,你必须重新访问填充。MySQL支持正则表达式,但它非常有限-没有正则表达式子字符串可以使这一短时间工作。@OMG好吧,只需填充到你满意的大小即可。